外部加入2个表并限制为2列

时间:2014-04-29 22:41:47

标签: mysql

我想我不是以正确的方式提问,所以即使经过数小时的研究我也找不到答案。所以我希望我能在这里得到答案。

Table1
fragranceId, description, status
1,           Floral,      Active
2,           Musk,        Active
3,           Fruity,      Active

Table2
fragranceId, contactId, value
1,           1,         Love It
2,           1,         Hate It
3,           1,         NULL

我可以结合2表的结果并获得

fragranceId,contactId,description,status

但我正在旋转我的车轮试图限制价值并联系我,同时展示那些没有价值的香水。

IE:
fragranceId, contactId, description, status, value
1,           1,         Floral,      Active, Love It
2,           1,         Musk,        Active, Hate It
3,           1,         Fruity,      Active, NULL

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT * FROM Table1 LEFT JOIN Table2 USING (fragranceId) WHERE contactId = 1 AND (value IS NULL OR value = 'Hate It')

与NULL相比,您应该使用IS NULLIS NOT NULL<=>,因为=如果一方为NULL且NULL后来计算为false,则始终返回NULL。

您也可能对COALESCE()感兴趣,这是将NULL转换为文本的好方法。例如。使用COALESCE(value, 'No opinion given')来删除结果中的NULL值字段。

答案 1 :(得分:0)

由于使用“正常”比较运算符的null的唯一属性,运算符不会给出您所期望的结果。原因是逻辑上的null意味着未知。

因此,如果value包含null。并且您比较value = null结果是未知的并且行未被mstched /返回。如果你问值!= null,结果是未知的,并且行不匹配。

SQl使用关键字IS NULL和IS NOT NULL来解决此问题。

因此,如果您声明值为IS NULL,则结果为true,并且匹配/返回该行。

答案 2 :(得分:0)

如果你尝试这样做怎么办

select 
t1.fragranceId, 
t2.contactId, 
t1.description, 
t1.status,
t2.value
from 
Table1 t1 
left join Table2 t2
on t1.fragranceId = t2.fragranceId
and t2.value is not null

在此处查看演示小提琴http://sqlfiddle.com/#!2/1a702/2

相关问题