基本SQL:如何使用一个表的属性作为其他表的查找

时间:2013-02-23 23:12:16

标签: sql

假设我有三个表:

Table A:

Column A | Column B
   Z          Q
   Q          Z


Table Z:

Column A | Column B
   100        50


Table Q:

Column A | Column B
   200        75 

我要做的是使用表A作为一种指南产生如下结果:

 DESIRED RESULT:

@Temp Table
  Column A | Column B
     100        75
     200        50 

我希望能够在SQL中将此效果作为存储过程执行,但是我无法获得我想要的结果。可以使用一些帮助。

2 个答案:

答案 0 :(得分:1)

在设计的示例中,在不同的表上使用相同的列名称有点令人困惑,但我相信您要描述的是经典的多对多关系。

如果是这样,您的Table A将成为您的交叉引用表。

不幸的是,要使其工作,您需要将相关的外键值存储在交叉引用表中,而不是您建议的实际值。

这可能就是你想要的:

Table A
QA |ZA
1  |2
3  |4


Table Q
QA |QB
1  |100
3  |200


Table Z
ZA |ZB
2  |300
4  |400


SELECT Q.QB, Z.ZB
FROM Q INNER JOIN A ON Q.QA = A.QA
  INNER JOIN Z ON Z.ZA = A.ZA

...导致:

QB |ZB
100|300
200|400

答案 1 :(得分:1)

如果我理解你的要求,这是一种方法,但是如果z和q表中有多个值,除非你有什么要加入,否则它将不起作用:

select 
  case when a.cola = 'Z' then z.cola else q.cola end cola,
  case when a.colb = 'Z' then z.colb else q.colb end colb
from tablea a, tableq q, tablez z

Sample Fiddle Demo