我正在尝试进行多查询,但我不想使用子查询,例如:
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
答案 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;