【发布时间】:2016-01-12 05:28:57
【问题描述】:
SELECT DISTINCT p.id_product, t.id_tag, t.name FROM ps_tag t
JOIN ps_product p ON p.id_product=t.name AND t.name
IN(SELECT id_product FROM ps_product)
AND p.available_for_order = 1
GROUP BY t.id_tag, p.id_product
ORDER BY `p`.`id_product` DESC
此查询返回这样的结果(在正确的结果中)
id_product id_tag name
43 79020 43P109
43 79021 43P109
43 79022 43P109
43 105796 43
43 114789 43
ON 语句是 p.id_product=t.name,但 43 不是 43P109。我在这里哪里做错了?我只需要p.id_product 正好等于t.name 的结果,所以只返回名称43?
【问题讨论】:
-
如果删除 JOIN 中的“AND t.NAME IN(SELECT id_product FROM ps_product)”子句,查询返回的结果是否有所不同?
-
@Forty3 不,是一样的。我添加它是为了解决它,但两种方式都是一样的。
-
我认为@weirdan 提到的Mysql 文档似乎提供了答案:“原因是有许多不同的字符串可以转换为值1,例如'1', '1',或'1a'。”看起来它正在将“43”转换为相等测试中的数字。非常令人不安。
标签: mysql