这样 ? SELECT * FROM host_field hf LEFT JOIN host_field_value hfv ON hf.hf_id = hfv.hfv_fid LEFT JOIN HOST h ON h.hid = hfv.hfv_hid ORDER BY h.hid ASC, hf.hf_id ASC贴要求结果出来看看
我现在的查询句子是: SELECT h.hid,h.hstate, hf.hf_id,hf.hf_name, hf.hf_title,hf.hf_ifsearch, hfv.hfv_value FROM host_field_value hfv LEFT JOIN (host h, host_field hf) ON (h.hid = hfv.hfv_hid AND hf.hf_id = hfv.hfv_fid) ORDER BY h.hid ASC, hf.hf_id ASC 得到的结果是: 注意看hid 1的的hf_id有到22 hid2的的hf_id只有到11. 因为hid1和hid2保存在host_field_value表里只有那些字段的值, 我想实现的是根据host_field表的数据:让查出来的所有网站的hf_id能到22(就是host_field的全部字段)。不知道能明白我的意思了么? 晕, 我表达不好.
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
SELECT * FROM host_field hf
LEFT JOIN host_field_value hfv ON hf.hf_id = hfv.hfv_fid
LEFT JOIN HOST h ON h.hid = hfv.hfv_hid
ORDER BY h.hid ASC, hf.hf_id ASC贴要求结果出来看看
SELECT h.hid,h.hstate, hf.hf_id,hf.hf_name, hf.hf_title,hf.hf_ifsearch, hfv.hfv_value
FROM host_field_value hfv
LEFT JOIN (host h, host_field hf)
ON (h.hid = hfv.hfv_hid AND hf.hf_id = hfv.hfv_fid)
ORDER BY h.hid ASC, hf.hf_id ASC
得到的结果是:
注意看hid 1的的hf_id有到22 hid2的的hf_id只有到11.
因为hid1和hid2保存在host_field_value表里只有那些字段的值,
我想实现的是根据host_field表的数据:让查出来的所有网站的hf_id能到22(就是host_field的全部字段)。不知道能明白我的意思了么? 晕, 我表达不好.
aid astate ..
1 1
2 1B表:(这张表用于保存A表的字段属性)
bid bfield
1 f1
2 f2
3 f3C表:(这张表就是保存字段对应的值了)
cid aid bid cvalue
1 1 1 v11
2 1 2 v12
3 1 3 v13
4 2 1 v21
5 2 2 v22
6 3 1 v31然后希望得出来的数据结构是:
aid bid bfield cvalue
1 1 f1 v11
1 2 f2 v12
1 3 f3 v13
2 1 f1 v21
2 2 f2 v22
2 3 f3 null
3 1 f1 v31
3 2 f2 null
3 3 f3 null
我现在主要碰到的问题是:我没办法表现出上面cvalue是null的记录
按上面描述 我现在的sql语句查询来的是:
aid bid bfield cvalue
1 1 f1 v11
1 2 f2 v12
1 3 f3 v13
2 1 f1 v21
2 2 f2 v22
3 1 f1 v31
-> from (a , b) left join c on a.aid=c.aid and b.bid=c.bid
-> order by 1,2;
+-----+-----+--------+--------+
| aid | bid | bfield | cvalue |
+-----+-----+--------+--------+
| 1 | 1 | f1 | v11 |
| 1 | 2 | f2 | v12 |
| 1 | 3 | f3 | v13 |
| 1 | 4 | f4 | NULL |
| 2 | 1 | f1 | v21 |
| 2 | 2 | f2 | v22 |
| 2 | 3 | f3 | NULL |
| 2 | 4 | f4 | NULL |
| 3 | 1 | f1 | v31 |
| 3 | 2 | f2 | NULL |
| 3 | 3 | f3 | NULL |
| 3 | 4 | f4 | NULL |
+-----+-----+--------+--------+
12 rows in set (0.01 sec)mysql>
SELECT * FROM a,b
ORDER BY a.aid,bid) aa
LEFT JOIN c ON aa.bid=c.bid AND aa.aid=c.aid