MySQL,如果匹配则显示列的值,否则保留为null

时间:2013-12-04 19:44:25

标签: mysql

我确定之前已经问过,但无法找到答案。

我有3张桌子OWNER,CAR,HOUSE

OWNER有2列id和名称

CAR有3列id,ownerId和cartype

HOUSE有4列id,ownerId,地址,国家/地区

我想编写一个SQL查询来获取瑞典的所有者名称,购物车类型和地址

这是棘手的部分。即使他们在瑞典没有房子,我也希望结果表中包含所有的所有者姓名和购物车类型。我可以在1个查询中获得所有内容,还是需要使用2个?该查询将如何显示?

2 个答案:

答案 0 :(得分:2)

您应该可以使用简单的左连接来完成此操作:

SELECT O.name, C.cartype, H.address, H.country
FROM OWNER AS O
JOIN CAR AS C ON O.id = C.ownerid
LEFT JOIN HOUSE AS H ON O.id = H.ownerid AND Ucase(H.country) = "SWEDEN"

这将始终为您提供所有者及其车型的列表,此外,它还会列出那些恰好在瑞典拥有住宅地址的人员。

答案 1 :(得分:1)

首先,您需要加入表格,然后使用CASE检查

在查询中添加新列
SELECT o.* , c.* ,h.*, 
(CASE WHEN h.county ='sweden' THEN h.county ELSE NULL END) AS HasCountry
FROM OWNER o 
JOIN CAR c ON (c.ownerId =o.id)
JOIN HOUSE h ON (h.ownerId =o.id)