让我看看这3张桌子:
主表:
ID | OtherStuff1 | OtherStuff2 | IdProvince | IdTown
-----+-------------+-------------+------------+--------
1 | Stuff1 | Stuff2 | NULL | 1
-----+-------------+-------------+------------+--------
2 | Stuff3 | Stuff4 | 1 | NULL
省表:
ID | ProvinceName
---+--------------
1 | ProvName1
城镇表:
ID | TownName
---+--------------
1 | TwName1
然后我使用其中一个sql打印信息,使其显示名称而不是Id编号。
SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, TownName
FROM main AS a
LEFT JOIN (province AS b, town AS c)
ON (a.IdProvince = b.Id AND a.IdTown = c.Id)
WHERE a.IdProvince=1;
或
SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, TownName
FROM main AS a
LEFT JOIN (province AS b, town AS c)
ON (a.IdProvince = b.Id AND a.IdTown = c.Id)
WHERE a.IdTown=1;
问题在于,当它打印结果时,它会像这样:
ID | OtherStuff1 | OtherStuff2 | ProvinceName | TownName
-----+-------------+-------------+--------------+--------
1 | Stuff1 | Stuff2 | NULL | NULL
如果其中一个id被置为NULL,那么即使有其他带有数字的id,它也会置为NULL。如果不删除该列的null连接,我该如何避免这种情况:
SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, IdTown
FROM main AS a
LEFT JOIN (province AS b)
ON (a.IdProvince = b.Id)
WHERE a.IdProvince=1;
如果IdTown为NULL但是我不想要这个解决方案,这会有效,因为有很多行和很多其他列有Id'并且不可能一个一个地检查哪一个是NULL而哪一个不是。
所以我想要一个像这样的查询,但是当有一个null时,它不会弄乱其他Id将它们全部置为NULL。
SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, TownName
FROM main AS a
LEFT JOIN (province AS b, town AS c)
ON (a.IdProvince = b.Id AND a.IdTown = c.Id)
WHERE a.IdProvince=1;
很抱歉,此查询的预期结果如下:
ID | OtherStuff1 | OtherStuff2 | ProvinceName | TownName
-----+-------------+-------------+--------------+--------
2 | Stuff1 | Stuff2 | ProvName1 | NULL
有什么想法吗?
提前感谢您的帮助!
答案 0 :(得分:1)
SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, TownName
FROM main AS a
LEFT JOIN province AS b
ON a.IdProvince = b.Id
LEFT JOIN town as c
ON a.IdTown = c.Id
WHERE a.IdProvince=1;
答案 1 :(得分:0)
这是因为ON子句中的条件:
=Month(Now())
在这里,只有在满足两个条件时才要求LEFT JOIN 2表格,在你的情况下它们不会。
我会尝试将2个连接分开,如下所示:
a.IdProvince = b.Id AND a.IdTown = c.Id