SQL语句从多个表中检索信息

时间:2015-01-03 16:01:13

标签: mysql sql select join

我需要一些帮助来构建一个SQL语句。 我只掌握有关SQL的基本知识(插入,删除,更改,在哪里,选择),但从来没有真正处理聚合函数或连接。

所以这是设置:

表A

  • 的cust_id
  • PROD_ID
  • 的StatusCode
  • ...

表B

  • 的cust_id
  • land_id
  • ...

表C

  • COUNTRY_ID
  • ...

表D

  • COUNTRY_ID
  • COUNTRY_CODE

表E

  • PRODUCT_ID
  • country_code1

SQL语句应输出的内容是:表A中statusCode为1或2或3的所有行以及country_code == country_code1。

其中country_code可以通过表E从表B,C,D和country_code1获得。

请不要发布有关数据库结构本身的答案,因为我无权更改它们。

我的方法是这样,但很明显,因为我是SQL初学者,所以这是非常错的:

SELECT * FROM TableA
INNER JOIN TableB ON TableA.cust_id = TableB.cust_id
INNER JOIN TableC ON TableB.landId = TableC.country_id
INNER JOIN TableE ON TableA.prod_id = TableE.product_id
INNER JOIN TableD ON TableE.country_code1 = TableD.country_code
WHERE statusCode IN (1,2,3)

2 个答案:

答案 0 :(得分:1)

脱离我的头顶。

用FK加入两组表格 加入这些团体, 限制超级集 更多来了

SELECT * 
FROM (tableA A INNER JOIN tableB B ON A.cust_id=B.cust_id)

INNER JOIN  tableE E ON E.product_id=A.prod_id
INNER JOIN (tableC C INNER JOIN tabldeD D ON D.country_id)
ON D.country_code = E.country_code1
WHERE A.statusCode IN(1,2,3)

我们不必担心国家/地区代码位,因为它位于' join'。

答案 1 :(得分:0)

脱离我的头顶(未经测试,我并非100%确定这是您的要求):

select a.cust_id, a.prod_id, a.statusCode,
       b.land_id,
       c.country_id,
       d.country_code,
       e.product_id
from   TableA a, TableB b, TableC c, TableD d, TableE e
where  a.cust_id = b.cust_id            -- basic joins on common fields
  and  b.land_id = c.country_id
  and  b.land_id = d.country_id
  and  d.country_code = e.country_code1
  and  a.statusCode in (1, 2, 3)        -- finally the statuscode selection