场景如下:我有这两个表:
(TABLE1)
SUPER_ID| NAME |
-------+--
1 | BOB |
(TABLE2)
ID| SUPER_ID |
-------+----+
1 | 1 |
2 | 1 |
3 | 1 |
如果我将这两个表加入
`SELECT a.super_id, a.name
FROM TABLE1 a LEFT OUTER JOIN TABLE2 b ON a.super_id = b.super_id
WHERE a.super_id = 1`
结果将是
SUPER_ID| NAME |
-------+--------
1 | BOB |
1 | BOB |
1 | BOB |
如何在不使用GROUP BY的情况下仅选择TABLE1中的行?感谢
更新:好的,我有第3张桌子......
(TABLE3)
ID| TYPE |
-------+----+
1 | A |
2 | B |
3 | C |
我需要加入TABLE2 AS:
SELECT a.super_id, a.name
FROM TABLE1 a INNER JOIN
TABLE2 b ON a.super_id = b.super_id INNER JOIN
TABLE3 c ON b.id = c.id
WHERE a.super_id = 1
答案 0 :(得分:1)
通过基于某些其他[唯一]标准来限制连接。当然,SQL语法取决于您选择的其他标准。假设您想要输入最新记录,如果表格有时间戳列,您可以这样做:
SELECT a.super_id, a.name
FrOM TABLE1 a LEFT JOIN TABLE2 b
ON b.super_id = a.super_id
and b.timestamp = (Select Max(timestamp)
From TABLE2
Where super_id = a.super_id)
WHERE a.super_id = 1
如果您没有时间戳,但是您有唯一的索引或密钥(看起来像id
那样),您可以使用:
SELECT a.super_id, a.name
FrOM TABLE1 a LEFT JOIN TABLE2 b
ON b.super_id = a.super_id
and b.id= (Select Max(id)
From TABLE2
Where super_id = a.super_id)
WHERE a.super_id = 1
答案 1 :(得分:0)
有很多方法可以做到。
如果你在table2中有super_id,我假设你想要table1中的行。
您可以使用EXISTS
SELECT a.super_id, a.name
FROM TABLE1 a
WHERE EXISTS ( SELECT NULL FROM table2 b WHERE a.super_id = b.super_id )
AND a.super_id = 1
<强>更新强>
您可以将GROUP BY用于WITH子句。
WITH single_b AS ( SELECT super_id, name
FROM table2
GROUP BY super_id, name )
SELECT a.super_id, a.name
FROM TABLE1 a INNER JOIN single_b b ON a.super_id = b.super_id
INNER JOIN TABLE3 c ON b.super_id = c.id
WHERE a.super_id = 1