选择连接表具有相同值的行

时间:2017-03-17 14:30:17

标签: mysql join

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的选项。

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(您需要检查纯文字结果或点击网格)