表1
col1 col 2
A aaa
B bbb
C ccc
表2
col1 col 2 col3
A aaa xx
B bbb yy
C ccc zz
D ddd hh
E eee mm
如何编写一个查询,其中我获得了所有table1数据,并且只有col3到表1的现有记录。table1只有50条记录,而Table2有100k。但是我只需要表1的所有50条记录,并且只需要通过加入将col3添加到记录中 表格1。 col1 = table2.col1
答案 0 :(得分:3)
根据描述,我建议此查询:
SELECT
t1.col1,
t2.col2,
t2.col3
FROM
table1 AS t1
INNER JOIN
table2 AS t2 ON (t2.col1 = t1.col1 AND t2.col2 = t1.col2)
SELECT
子句确定结果集中将出现哪些列。您的描述在这里为我们提供了一些帮助。
对于联接,选择正确的联接类型对于您要进行的查询很重要。您的描述对此很有帮助:
如何编写查询,以获取表1的所有数据,而只有col3到表1的现有记录。
“获取所有表1”表示结果集应包括该表中的所有列。
SELECT table1.col1, table1.col2 […]
“获取所有表1”表示表1是FROM
子句中的主要来源。
[…] FROM table1 […]
“仅col3 [from table2]”表示结果集也应包括该列。
SELECT […] table2.col3
“仅[...]到表1的现有记录”表示联接类型为INNER JOIN
。
FROM table1
INNER JOIN table2 […]
“仅col3到表1的现有记录”表示连接条件。
FROM table1
INNER JOIN table2 ON table2.[…] = table1.[…]
但是您没有确切指定什么条件告诉我们在表之间等效的记录。我们是否应该假设条件是所有具有相同名称的列都具有相同的值?
FROM table1
INNER JOIN table2 ON (table2.col1 = table1.col1 AND table2.col2 = table1.col2)
我们将多次使用这些表,因此在AS
子句中设置简洁的FROM
别名是一个好习惯。
答案 1 :(得分:1)
您想要INNER JOIN
:
SELECT t1.col1, t1.col2, t2.col3
FROM table1 t1 INNER JOIN
table2 t2
ON t2.col1 = t1.col1;
答案 2 :(得分:0)
尝试左加入:
SELECT t1.col1, t1.col2, t2.col3
FROM table1 t1 LEFT JOIN
table2 t2
ON t1.col1 = t2.col1 AND t1.col2 = t2.col2;