有没有办法进行多表查询并从特定表中获取结果?

时间:2014-05-10 22:30:44

标签: sql join

我正在尝试进行多查询,但我不想使用子查询,例如:

SELECT column1 
FROM table1 
WHERE 
    EXISTS (SELECT column1 FROM table2 WHERE table1.column1 = table2.column1);)

我想过使用JOIN,但到目前为止我最好的结果是:

SELECT * 
FROM table1 
JOIN table2 ON table1.t1id = table2.t2id 
WHERE table1.id = 5;

除非我得到一个重复的列(表1中的id和2是外键),否则这样会很好。

如果可能,如何删除重复的列?

  

更新:

Table1:
 tableA_ID, TABLEB_ID
         1,    1
         1,    4
         3,    2
         4,    3

TableA: ID, COL1, COL2
         1, A, B
         2, A, B
         3, A, B
         4, A, B   

TableB: ID, Col3, COL4 
         1, C, D
         2, C, D
         3, C, D
         4, C, D   

我希望根据条件

TableA获取全部或部分列

示例:假设条件是tableA_ID = 1将导致表中的第2行,然后我想获得TableA中响应{ID的所有或部分列我来自Table1

示例:之前的结果是[{1,1}{1,4}],这意味着我想要TableA结果:

TableA.ID, TableA.COL1, TableA.COL2  
    1,A,B  
    4,A,B  

我得到的实际结果是:

Table1.tableA_ID, Table1.TABLEB_ID, TableA.ID, TableA.COL1, TableA.COL2  
    1,1,1,A,B  
    1,4,4,A,B

4 个答案:

答案 0 :(得分:2)

这是你要找的吗?

select a.id, a.column1, b.column2 
from table1 a 
left join table2 b on a.id = b.otherid;

答案 1 :(得分:0)

您无法根据返回的值更改查询的列列表。它不是SQL设计运行的方式。最好,您可以返回第二个表中的所有列,并根据该行中的其他值忽略那些不相关的列。

我甚至不确定变量列列表的工作方式。在您的方案中,您将分别查找两个离散值。但这不是唯一的情况:如果条件为tableA_ID in (1,2)会怎样。您是否希望将不同行中的不同数量的列作为单个结果集的一部分?

答案 2 :(得分:0)

获取你想要的列(只是来自特定的表,如你所说)是一个简单的部分(顺便说一句 - 如果你能帮助它,请不要使用'*' - 另一个讨论主题):

SELECT
   A.ID,
   A.COL1,
   A.COL2
FROM
   TABLE1 Bridge

   LEFT JOIN TABLEA A
   ON Bridge.TABLEA_ID = A.ID

   LEFT JOIN TABLEB B
   ON Bridge.TABLEB_ID = B.ID

获取所需的行将是更难的部分(受您选择的连接影响,以及其他一些事项)。

答案 3 :(得分:0)

我认为您只需要选择表A的字段并使用distinct子句。您的其余查询将保持不变。即。

SELECT distinct table1.* 
FROM table1 
JOIN table2 ON table1.t1id = table2.t2id 
WHERE table1.id = 5;