【发布时间】:2016-03-17 08:25:56
【问题描述】:
我有这样的表格:
tbl_product
===========
product_id (PK)
tbl_product_attribute
=====================
pro_attr_id (PK)
pro_attr_pro_id (FK to tbl_product)
pro_attr_attr_opt_id(FK to tbl_attribute_option)
现在,我想查询 tbl_product_attribute 中具有 2 个属性的产品。
例如:
SELECT "p".*
FROM "tbl_omx_product" "p"
LEFT JOIN "tbl_omx_product_attribute" "proAttr" ON "proAttr".pro_attr_pro_id = p.product_id
WHERE
(pro_attr_attr_opt_id LIKE '%1759%' ) AND
(pro_attr_attr_opt_id LIKE '%1776%' )
GROUP BY "p"."product_id";
所以我想在 tbl_omx_product_attribute 处获得正好有 2 个值的产品,即 1759 和 1776。
但除非我使用关系 OR 而不是 AND,否则上述查询不会显示任何结果。
问题是检索在 tbl_product_attribute 具有 2 个值的产品的查询是什么?谢谢
【问题讨论】:
-
使用左连接你是否期望返回的结果集也包含空值?你能显示一个示例输出吗
-
如果您知道两个 id,那么为什么在 where 子句中使用 LIKE。你可以使用 IN (1759,1776)
-
@Harry Nope,我只期望值 1759 和 1776 的结果。例如,产品 1 具有这两个值,但产品 2 只有 1759,而不是我想要的仅限产品 1。
-
@devpro 使用 IN 将返回与使用关系“或”相同的结果。我想要的是具有这两种价值的产品。
-
那么您应该使用 = 而不是 LIKE 来匹配这些值。如果您不期望空行,那么为什么不使用内部联接?
标签: mysql join conditional-statements