Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 外部联接2个表并限制为2列_Mysql - Fatal编程技术网

Mysql 外部联接2个表并限制为2列

Mysql 外部联接2个表并限制为2列,mysql,Mysql,我想我问这个问题的方式不对,所以即使经过几个小时的研究,我也找不到答案。所以我希望我能在这里得到答案 Table1 fragranceId, description, status 1, Floral, Active 2, Musk, Active 3, Fruity, Active Table2 fragranceId, contactId, value 1, 1,

我想我问这个问题的方式不对,所以即使经过几个小时的研究,我也找不到答案。所以我希望我能在这里得到答案

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、描述、状态

但我在旋转我的轮子,试图让它限制在价值和接触ID上,同时展示那些没有价值的香水

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

SELECT * FROM Table1 LEFT JOIN Table2 USING (fragranceId) WHERE contactId = 1 AND (value IS NULL OR value = 'Hate It')
与NULL相比,您应该使用,如果其中一方为NULL,那么as将始终返回NULL,并且NULL稍后的计算结果为false


另外,您可能会对哪种方法是将空值转换为文本的好方法感兴趣。例如,使用COALESCEvalue、“未给出意见”来删除结果中的空值字段。

由于空值的独特属性,使用普通比较运算符无法提供您所期望的结果。原因是逻辑空表示未知

所以如果值包含null。如果您比较value=null,则结果未知,且该行不匹配/返回。如果你问价值!=null结果未知且行不匹配

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


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

如果您这样尝试会怎么样

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

在此处查看演示小提琴

只要您限制contactId,实际上就是在执行内部连接。或者,您是否也在寻找表1中的条目,而没有在表2中找到匹配的条目?这就是我得到的内部联接。我想展示所有的香水,有价值的和没有价值的同时。实际上我在另一个线程中找到了它。如果我没有弄错的话,我会在合并两个表后执行一个AND,以将结果限制在我想要的值内。然后,我可以为其他标准做一个WHERE。谢谢你的帮助:D