这是否意味着这种加入就像一对一关系一样?
请考虑以下表格:
Table 1 Table 2
________ ________
id name id name
1 O 1 T
2 B 1 N
SELECT Table 1.name, Table 2.name FROM Table 1, Table 2 WHERE Table 1.id = Table 2.id
只会将最后一行1 N
作为已连接的行返回吗?
1 O => 1N
如果第二个表具有相同的键id
,它如何工作。是否需要最后一次逃避之前的同意?
答案 0 :(得分:1)
不,连接将连接所有匹配的行,因此您的查询将返回2行:
Week Sales recent
1 1 1 8
2 2 3 6
3 3 5 10
4 4 7 14
5 5 9 12
您可以在以下SO问题中找到各种联接类型的更一般描述:What is the difference between "INNER JOIN" and "OUTER JOIN"?
答案 1 :(得分:0)
从不在FROM
子句中使用逗号。 始终使用正确的,明确的JOIN
语法。您的查询应写为:
SELECT t1.name, t2.name
FROM Table1 t1 JOIN
Table2 t2
ON t1.id = t2.id;
JOIN
返回所有匹配的行。没有“第一”或“最后”行的SQL概念。 SQL表代表无序集。
这很容易检查。 Here是一个演示结果的SQL小提琴。
答案 2 :(得分:0)
只是关于"约定"这可以帮助你理解" id"好一点。
" ID" ( by common convention )是一个自动编号的整数,可用于唯一地定位该表中的特定行。
每个表(按惯例)都有自己的" id"列,但这并不意味着您总是通过这些列加入。
表2可能包含"外键"这使得能够连接到Table1
"外键的命名"列(按惯例)通常是"表名"的组合。 &安培;下划线& " ID&#34 ;.因此,对您的示例进行可能的修订将是:
Table1 Table2
________ ________________________
id name id table1_id name
1 O 1000 1 T
2 B 9678 1 N
请注意,在此示例中,Table1中的ID与Table2的ID无关,因此查询现在将是:
SELECT t1.name, t2.name
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.id = t2.table1_id;
加入遵循指定的逻辑,这里是t1.id must equal t2.table1_id
。没有"第一" "最后"在那个逻辑中。连接满足指定条件的所有行。 (nb:&这可能意味着根据具体情况不会加入任何行)
请在单词FROM之后不要在表名之间使用逗号。习惯于INNER JOIN,LEFT OUTER JOIN(或他们的缩写JOIN和LEFT JOIN)这样的术语,从长远来看,会更好。