我有一个表(x),其中有900万行,其中一列是cosub,它有重复的重复值,还有另一个表(y),其中包含cosub的相关详细信息 它有59k行和其他列,提供与cosub相关的详细信息(充当查找表) 我如何加入这两个表,查询900万行,并从表(y)中选择cosub的其他细节。 例如:
Table x table y id cosub cosub div 1 A B 6 2 B A 5 3 C C 7 4 A A 5 5 B B 6 6 C A 5 .....................
查询的结果应如下所示(从表x中选择所有900万行)
1 A 5
2 B 6
3 C 7
4 A 5
5 B 6
6 C 7
答案 0 :(得分:1)
SELECT DISTINCT X.id, X.cosub, Y.div
FROM X
LEFT OUTER JOIN Y ON Y.cosub = X.cosub
-- WHERE xxxx here for optional where condition
-- ORDER BY xxxx here for optional ordering clause
我不是100%确定你需要DISTINCT(最好避免它),这取决于小表是否有重复。问题的文本似乎暗示没有这样的重复,但是然后示例给出了重复...
还要注意,如果表Y具有给定cosub的多个div值(即给定cosub的div值具有冲突的几个记录),则上述查询将导致在结果列表中显示多行,每个不同一行值(但重复表X中的数据)。
最后,建议使用片段和LEFT OUTER JOIN,这将允许结果包含仅包含表X中数据的记录(以及代替通常来自Y的字段值的空值),以防给定X记录具有在Y中找不到的cosub值。替代方法是使用简单的JOIN,这将具有从结果列表中排除任何此类记录的效果(即,结果将仅包括来自X的记录,前提是它们具有存在的cosub在Y)
答案 1 :(得分:1)
使用:
SELECT DISTINCT
x.id,
x.cosub,
y.div
FROM TABLE_x x
LEFT JOIN (SELECT t.cosub,
t.div,
--other columns
FROM TABLE_Y t) y ON y.cosub = x.cosub
从我读过的评论中,你需要预先处理TABLE_Y中的记录,以便在返回结果集之前获得正确的div / etc值。