【发布时间】:2015-05-23 13:00:44
【问题描述】:
我的桌子是这样设置的:
Table 1 Table 2 Table 3
+-------+-----+ +-------+-------+-------+-----+ +-------+-----+
| ID | ... | | ID | T1_ID | T3_ID | ... | | ID | ... |
+-------+-----+ +-------+-------|-------|-----| |-------|-----|
| 101 | ... | | 202 | 101 | 301 | ... | | 300 | ... |
| 102 | ... | | 203 | 101 | 302 | ... | | 302 | ... |
| 104 | ... | | 204 | 101 | 302 | ... | | 314 | ... |
+-------+-----+ | 205 | 101 | 302 | ... | +-------+-----+
| 206 | 104 | 327 | ... |
+-------+-------+-------+-----+
我想构造一个子查询语句,如果 table2.t3_id 存在于表 3 中,则只为表 1 的给定 id 选择表 2 的一行。
重要的是,表2中可能存在多行具有相同t3_id的行。因此,表2和表之间的外键关系不是唯一的或根本不存在。
我的想法是以下陈述:
inner join
(
SELECT *
FROM (
SELECT t3_id, t1_id, id
FROM table2
WHERE EXISTS
(
SELECT id
FROM table3
)
)
WHERE ROWNUM=1
) tb2 ON tb1.id = tb2.t1_id
这个语句返回多行,但我只需要一个。 我该怎么做?
【问题讨论】:
-
结果应该是?如果存在多行,取哪一行?
-
如果存在多行,取哪一行都没有关系。你可以拿第一个。结果应该是表 2 中的 id 或其用于连接的行。
-
您实际需要哪些列?你有什么理由不能做
SELECT t1_id, MAX(t3_id) FROM Table2 JOIN Table3 ON Table3.id = Table2.t3_id GROUP BY t1_id之类的事情吗?为什么Table3中有缺失值?拥有空的部分键通常是一个坏主意(您的数据库/应用程序设计似乎有些麻烦,匿名)。