我的数据库中有两个表,它们之间没有任何关系。第一个表描述了old_item。第二个表描述了这些old_item的更新。
例如,
表1
mysql> SELECT
coil_no
FROM coil
WHERE coil.coil_no = "DNA07X2B419011701A";
Empty set (0.00 sec)表2
mysql>SELECT
coil_no
FROM stock_taking_hanwa
WHERE stock_taking_hanwa.coil_no = "DNA07X2B419011701A";
+--------------------+
| coil |
+--------------------+
| DNA07X2B419011701A |
+--------------------+
1 row in set (0.00 sec)如果你能看到,coil_no是关键。我像这样使用内部连接:
SELECT
c.coil_no as old_item,
sth.coil_no as newest_item
FROM coil c
INNER JOIN stock_taking_hanwa sth
ON sth.coil_no = c.coil_no
WHERE c.coil_no = "DNA07X2B419011701A" OR sth.coil_no = "DNA07X2B419011701A" 但它给了我Empty set (0.00 sec)。
我需要这样的格式:
+--------------------+--------------------+
| old_item | new_item |
+--------------------+--------------------+
| | DNA07X2B419011701A |
+--------------------+--------------------+注:有时在另一种情况下,反之亦然。
+--------------------+--------------------+
| old_item | new_item |
+--------------------+--------------------+
| "Some item" | |
+--------------------+--------------------+发布于 2017-10-03 10:31:59
内部联接意味着您需要包含表old_item的记录和来自new_item的记录的行。如果其中一个项目不存在,则不会返回任何记录。
在mysql中,您没有完整的联接,因此不能以这种方式选择任何值.
您可以使用UNION ALL连接两个查询(一个用左连接,另一个用右连接),但它在大型表上并不真正具有性能.
最好的方法可能是进行两个单独的查询,然后再详细说明结果,但这取决于后端。
发布于 2017-10-03 10:21:28
这是因为您使用内部连接,使用两个连接和联合:
(SELECT
c.coil_no as old_item,
sth.coil_no as newest_item
FROM coil c
left JOIN stock_taking_hanwa sth
ON sth.coil_no = c.coil_no
WHERE c.coil_no = "DNA07X2B419011701A" OR sth.coil_no = "DNA07X2B419011701A" )
UNION ALL
(SELECT
d.coil_no as old_item,
s.coil_no as newest_item
FROM stock_taking_hanwa d
left JOIN coil s
ON s.coil_no = d.coil_no
WHERE d.coil_no = "DNA07X2B419011701A" OR s.coil_no = "DNA07X2B419011701A") https://stackoverflow.com/questions/46542219
复制相似问题