Mysql - Union表与字段的动态内容无关

时间:2017-10-03 10:14:36

标签: mysql

我的数据库中有两个表没有任何关系。 第一个表有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" |                    |
   +--------------------+--------------------+

2 个答案:

答案 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")