从第一个表中选择数据并将其与第二个表进行比较

时间:2012-12-03 18:32:17

标签: mysql selection

我在这里遇到问题,我无法理解这件事是如何运作的。 所以这是交易:

$q= mysql_query("SELECT * FROM fruits_list, fruits_have WHERE fruits_list.fruit != fruit_have.fruit AND fruit_list.color != fruit_have.color");

表:

fruits_list
- fruit --- color   -
-   1    -     2    -
-   2    -     3    -
-   1    -     3    -
-   1    -     4    -
---------------------

fruits_have
- fruit --- color -
-   1   ---   2   -
-   1   ---   3   -
-------------------

所以现在这个查询将删除“fruits_list”中的所有内容,其中“fruit”中包含“1”,“color”中包含“2”,“3”。

但是我想只删除两列相等的通道。在这个例子中,只应从“fruits_list”中删除2个通道,结果应该是这样的:

fruits_dont_have
- fruit --- color -
-  2    -    3    -
-  1    -    4    -
-------------------

所以问题是,我的查询应该改变什么? 我希望自己能够清楚地表达自己的理解。

编辑:

Ryan E - 简单地从结果中删除。

bonCodigo - 两者都是int。

2 个答案:

答案 0 :(得分:1)

理想情况下,您将使用SQL MINUS集合运算符,但MySQL尚不支持此。

您应该可以通过左边的WHERE连接来过滤掉匹配,但是:

SELECT fl.*
FROM fruits_list fl
LEFT JOIN fruits_have fh 
   ON fl.fruit = fh.fruit AND fl.color = fh.color
WHERE fh.fruit IS NULL

答案 1 :(得分:1)

尝试使用分隔符连接两列,然后进行比较,如下所示:

     SELECT * FROM fruits_list, fruits_have 
     WHERE CONCAT_WS('@',fruits_list.fruit, fruits_list.color) !=  
               CONCAT_WS('@',fruits_have.fruit, fruits_have.color)