Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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左连接,结果更少_Mysql_Join - Fatal编程技术网

MySQL左连接,结果更少

MySQL左连接,结果更少,mysql,join,Mysql,Join,我有一个小问题,我被困住了。我有两张桌子。第一个保存所有id,第二个保存表a中的一些(但不是全部)、值和相应的标识符。正如我所理解的,如果id在tableB中不存在,则id上的左连接应该为我提供第一个表中的所有id,第二个表为null。但我一直在获取两个表中存在的id数。我的概念错了吗 到目前为止,我的发言是: SELECT tableA.id, tableB.desiredValue FROM tableA LEFT JOIN tableB ON tableA.id=tableB.item_

我有一个小问题,我被困住了。我有两张桌子。第一个保存所有id,第二个保存表a中的一些(但不是全部)、值和相应的标识符。正如我所理解的,如果id在tableB中不存在,则id上的左连接应该为我提供第一个表中的所有id,第二个表为null。但我一直在获取两个表中存在的id数。我的概念错了吗

到目前为止,我的发言是:

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id
WHERE tableB.element_id = 'something'
OR tableB.element_id IS NULL;
有什么建议吗

Thanx,致以最良好的问候, 马库斯试试这个

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id
AND (tableB.element_id = 'something'
OR tableB.element_id IS NULL);

将涉及
表B
列的条件从
WHERE
移动到
ON

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON  tableA.id=tableB.item_id
                 AND tableB.element_id = 'something'

--- WHERE tableB.element_id IS NULL        --- this is probably not appropriate
;

总的来说,这似乎应该奏效。但是,我想在where条款中更具体一些:

SELECT tableA.id, tableB.desiredValue
FROM tableA 
LEFT JOIN tableB ON tableA.id = tableB.item_id
WHERE tableB.element_id = 'something' OR tableB.item_id IS NULL;
我已经将
item\u id
替换为我在中检查
NULL
的行——尽管它应该会有所不同,除非在连接工作的行中
element\u id
可以
NULL

您能否详细说明为什么需要where子句的另一部分--
tableB.element\u id='something'
?如果您只想返回所有行,我的一般建议是完全删除WHERE子句


您能否解释一下您希望返回的行的一般标准是什么?

在不使用
WHERE
子句的情况下尝试。您在查询中的任何其他地方都不使用
element\u id
——也许
element\u id
从不为空?您的概念是正确的,如果您从消除WHERE开始,您可能会看到更接近预期的内容。如果没有,请向我们显示一些行作为示例数据,以便显示tableA中的所有项目,如果tableB中有相应的项目,也显示tableB中的项目?是的。在表A中,我说的是1000个id。在tableB中,它是一个交叉引用表(或任何被称为交叉引用表的东西),大多数id都会出现几次,作为唯一的键和第二个字段,用于标识名称或街道。连接现在总是返回与所需值所在的所有id相等的行数。e、 g.表A:id=5,表B:row1:item_id=5,type=1,value=bla第2行:item_id=5,type=2,value=blubb。项目id=7,类型=1,值=ping。在这个表上,如果我查询type=1,我会得到2个结果,甚至有3行@marcustoeper如果查询
type=1
,则只会返回匹配的行。在上面的查询中,您使用
或element\u id为NULL
,这将为
element\u id
返回NULL。请使用数据库中的实际行以及您希望输出的内容编辑上述问题。将
WHERE
作为
ON
上的
的一部分有点奇怪。。。再加上没有解释为什么这比OP中的代码更好,你会得到一个
-1
。很好!我在WHERE子句中有tableA.id=tableB.item\u id位。按照上面描述的方式移动,它就完成了任务。非常好,thanx!