我在这里遇到问题,我无法理解这件事是如何运作的。 所以这是交易:
$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。
答案 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)