product_options
ID | Option
1 | One
2 | Two
3 | Three
product_to_options
ID | Product | Option
1 | 1 | 1
2 | 2 | 2
3 | 2 | 3
基本上,我需要从product_options获取所有行,除了 那些选项在相同产品上供应的那些。
例如:
传递值1,将不返回任何内容。
传递值2,将返回ID为3的选项
传递值3,将返回ID为2的选项。
答案 0 :(得分:1)
我用自己的理解做到了最好。
pto.Product = @option
所以你得到的所有行都匹配@option
pto.Option <> @option
但过滤具有相同ID的
SELECT po.*
FROM product_options po
JOIN (
SELECT pto.Option
FROM product_to_options pto
WHERE pto.Product = @option
AND pto.Option <> @option
) as filter
ON PO.ID = filter.Option
答案 1 :(得分:0)
您可以将表连接到自身,在值上过滤左表并从右表返回值。
SELECT
pto2.Option
FROM
product_to_options pto1
INNER JOIN product_to_options pto2
ON pto1.Product = pto2.Product
AND pto1.ID <> pto2.ID
WHERE
pto1.option = @option;
您应该注意,根据数据,您可以获得多个值。
Here's a working sample with minor syntax changes for sql server(您需要检查纯文字结果或点击网格)