我的数据库中有两个表没有任何关系。 第一个表有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" | |
+--------------------+--------------------+
答案 0 :(得分:1)
INNER JOIN表示您需要一行包含表old_item中的记录和来自new_item的记录。如果其中一个中没有项目,则不会返回任何记录。
在mysql中你没有FULL JOINS,所以你不能以这种方式选择任何值......
您可以使用UNION ALL连接两个查询(一个使用LEFT JOIN,另一个使用RIGHT JOIN),但它在大型表格上并不真正有效...
可能最好做的是做两个单独的查询并在此之后详细说明结果,但这取决于后端
答案 1 :(得分:0)
那是因为你使用内连接,改为使用两个连接和联盟:
(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")