MySQL加入此特定方案

时间:2009-03-17 03:34:16

标签: mysql join

我遇到了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,我需要跳过LnameA1_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     #

3 个答案:

答案 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;