先讲讲我在学的,如果你觉得我这里的信息不完整,可以去这里看 W3School的教程(点击进入)
其中的demo写的很好:
案例
“Persons” 表:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
“Orders” 表:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName
结果:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
Bush | George |
记:
我是在写easyui里datagrid的时候遇到这个问题的,我需要数据库返回给我这样一张表:
![](https://i2.wp.com/140.143.17.130/wp-content/uploads/2018/11/KPUVM6LCXYN3AQFV-300x262.png)
表的前两个字段为缺陷类型,后两个字段则表示当前改缺陷类型是否可读可写。
整张表用于描述1某类测试人员对当前2某个项目的3各种缺陷的读写权限。
数据规模是立方级别的,存储在数据库中可能会造成不必要的浪费,于是我打算采用拼接的方式去实现。
具体想法是这样的:
![](https://i2.wp.com/140.143.17.130/wp-content/uploads/2018/11/C2DGW7B3FCJ0SA7938J5E-300x111.png)
这是目前的有的表,右边的表虽然结构完整,但是因为可能缺失数据,在前台显示的是空的,这样用户就没有办法设置权限。而左边的表则有完整的数据,所以我就想有没有什么东西可以实现加载左表的数据,然后根据缺陷编码,右表中要是有匹配的数据,则将其合并,如果没有匹配的数据,那么依然合并,没有数据的部分则用默认值填充。
"select IFNULL(a.roleid,?2)as roleid, \n" + "IFNULL(a.bugworkflow_id, ?1)as bugworkflow_id, \n" + "(publicproperty.property_code)as id, \n" + "IFNULL(a.write_able,0) as write_able, \n" + "IFNULL(a.read_able,0)as read_able, \n" + " publicproperty.property_name,publicproperty.property_code from publicproperty left join" + " (select property_code,roleid,bugworkflow_id,write_able,read_able,id from role_publicproperty where roleid=?2 and bugworkflow_id=?1 ) as a" + " on publicproperty.property_code=a.property_code;"
最终便写出了这个令人sql发指的语句。