SQL从表中选择所有连接的行与值匹配的行

时间:2015-11-05 15:50:38

标签: sql join

表格A 表格B 相关联,后者又与表格C 相关联。

我只能通过B中的一个键从A到C.

我必须从A获取所有行,其中来自C的所有链接行具有C.value ='Y'

我尝试了以下代码,但是一旦在C中的一个链接行中找到匹配,它就已经从A中选择了行,而不是当C中的所有链接行匹配C.value ='Y'时。

  step_json = {
    "id" => step.id,
    "name" => step.name,
    "position" => step.position,
    "ancestry" => step.ancestry,
    "image_path" => (step.first_image.image_path_url || step.first_image.s3_filepath) if step.first_image.present?,
    "label" => step.label if step.label.present?,
    "label_color" => step.last_color if step.label.present?
  }

有没有办法在SQL中执行此操作?

enter image description here enter image description here

3 个答案:

答案 0 :(得分:0)

我想我现在明白了这个问题..试试这个。可能是更好的方法,但这应该有效。

SELECT * 
FROM A 
LEFT JOIN B ON A.ID1 = B.ID1
LEFT JOIN C ON B.ID2 = C.ID2
WHERE C.ID2 in (SELECT ID2 FROM C WHERE VALUE = 'N')
AND C.ID2 not in (SELECT ID2 FROM C WHERE VALUE <> 'N')

答案 1 :(得分:0)

您可以UNION ALL执行此操作。 注意: select语句中的列数应与

匹配
Select *
FROM (
SELECT * FROM A
UNION ALL
SELECT * FROM B
UNION ALL 
SELECT * FROM C
)a
where value ='N'

更新

 Select * From A
LEFT JOIN ( Select * FROM B INNER JOIN C 
               ON B.columnName = C.ColumnName 
                WHERE C.Value ='N') z
 ON z.columnName = A.ColumnName 

答案 2 :(得分:0)

此查询返回A中的所有行,其中C中的所有链接行都具有C.value&#39; Y&#39;或者没有B或C链接的地方。关于JB King的建议。

SELECT * FROM A WHERE A.ID1 
NOT IN 
( 
  SELECT DISTINCT A.ID1 FROM A 
  JOIN B ON A.ID1=B.ID1
  JOIN C ON B.ID2=C.ID2 WHERE C.value = 'N'
)