我遇到了MySQL连接问题。
Table_A
A_id Cost1 A1_id Cost2
1 500 0 200
1 100 1 100
1 50 2 60
1 10 3 50
2 5 0 10
Table_B
(参考B_id
:来自Table_A
A1_id
): B_id FName LName
1 X A
2 Y B
3 Z C
Table_C
(参考C_id
:来自Table_A
A_id
):C_id Towns
1 Atlanta
2 NewYork
我需要组合所有三个表,如下面的输出:
Towns
匹配的(Table_A.A_id=Table_C.C_id)
。Fname
匹配的Lname
,(table_A.A1_id=Table_b.b_id)
。Towns
if A1_id != 0
。Fname
,我需要跳过Lname
,A1_id == 0
。其余数据可以是值或null,我将其指定为“#”。 对于给定的场景,什么是高效的MySQL查询?
A_id Cost1 A1_id cost2 Fname Lname Towns
1 500 0 200 # # Atlanta
1 100 1 100 X A #
1 50 2 60 Y B #
1 10 3 50 Z C #
答案 0 :(得分:6)
我认为它应该是这样的。
select A_id, Cost1, A1_id, cost2, Fname, Lname, Towns
from Table_A
left join Table_B on table_A.A1_id = Table_b.b_id
left join Table_C on Table_A.A_id = Table_C.C_id
答案 1 :(得分:1)
这看起来像是对我的两个不同查询的UNION。我将假设ID列永远不会包含负值。
SELECT A.A_id, A.Cost1, A.A1_id, A.Cost2, B.Fname, B.Lname, C.Town
FROM Table_A AS A
INNER JOIN Table_B AS B ON A.A1_id = B.B_id
LEFT OUTER JOIN Table_C AS C ON A.A_id = C.C_id
WHERE A.A1_id != 0
AND C.C_id < 0
UNION
SELECT A.A_id, A.Cost1, A.A1_id, A.Cost2, B.Fname, B.Lname, C.Town
FROM Table_A AS A
LEFT OUTER JOIN Table_B AS B ON A.A1_id = B.B_id
INNER JOIN Table_C AS C ON A.A_id = C.C_id
WHERE A.A1_id = 0
AND B.B_id < 0;
我对这个表述并不完全有信心。 B.B_id&lt; B.B_id&lt; B.B_id&lt; 0和C.C_id&lt; 0需要与相应的ON子句相关联。
使用适当的OR'd滤镜在单个SELECT中使用两个左外连接也可以获得正确的结果。
答案 2 :(得分:0)
如果我理解正确,那应该是:
select fname, lname, towns
from table_a, table_b table_c
where table_a.a_id = table_c.c_id
and table_a.a1_id = table_b.b_id
and table_a.a1_id <> 0;