我表格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中执行此操作?
答案 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'
)