检索与JOIN共享公共字段的MySQL记录
我有三个表,它们共享名为检索与JOIN共享公共字段的MySQL记录,mysql,join,Mysql,Join,我有三个表,它们共享名为id的公共列。 (但尚未设置为外键) 在这种情况下,如何获取包含字段id、x、y、a、b、c、d的记录,其中x=0.0和y=0.0 我期望结果是: +----+-----+-----+-----+-----+-----+-----+ | id | x | y | a | b | c | d | +----+-----+-----+-----+-----+-----+-----+ | 1 | 0.0 | 0.0 | 2.0 | 6.0 | 0.1
id
的公共列。
(但尚未设置为外键
)
在这种情况下,如何获取包含字段id、x、y、a、b、c、d
的记录,其中x=0.0和y=0.0
我期望结果是:
+----+-----+-----+-----+-----+-----+-----+
| id | x | y | a | b | c | d |
+----+-----+-----+-----+-----+-----+-----+
| 1 | 0.0 | 0.0 | 2.0 | 6.0 | 0.1 | 0.5 |
+----+-----+-----+-----+-----+-----+-----+
| 2 | 0.0 | 0.0 | 3.0 | 7.0 | 0.2 | 0.6 |
+----+-----+-----+-----+-----+-----+-----+
| 4 | 0.0 | 0.0 | 5.0 | 9.0 | 0.4 | 0.8 |
+----+-----+-----+-----+-----+-----+-----+
我在谷歌上搜索了关键字join
,但作为一个新手,我有点困惑。此查询是否:
SELECT * FROM Table1
INNER JOIN Table2
ON Table1.id = Table2.id
INNER JOIN Table3
ON Table1.id = Table3.id
WHERE x = 0.0 and y = 0.0
做我期望的正确的事情?我看不到表2中的select*或表3中的select*之类的东西。你可以这样做
SELECT Table1.*, Table2.*, Table3.* FROM Table1
INNER JOIN Table2
ON Table1.id = Table2.id
INNER JOIN Table3
ON Table1.id = Table3.id
WHERE x = 0.0 and y = 0.0
但在结果中,您将获得id列3次
要获得准确的结果,您需要明确选择所需的列:
SELECT Table1.id, Table1.x, Table1.y,
Table2.a, Table2.b,
Table3.c, Table3.d
FROM Table1
INNER JOIN Table2
ON Table1.id = Table2.id
INNER JOIN Table3
ON Table1.id = Table3.id
WHERE x = 0.0 and y = 0.0
如果您使用
而不是
上的使用将联接短语化为,则可以使用*精确获取所需的列:
SELECT *
FROM Table1 INNER JOIN
Table2
USING (id) INNER JOIN
Table3
USING (id)
WHERE x = 0.0 and y = 0.0;
一个注意事项是使用浮点值。通常,这些并不准确。如果你用的是小数,你应该没问题。但是数据库中的
0.0
实际上可能是0.0000000000001
,这将导致比较失败。是的,您的查询除了返回一些额外的列外,还会返回您指定的结果集
下面是一个如何编写该查询的示例
SELECT t.id
, t.x
, t.y
, u.a
, u.b
, v.c
, v.d
FROM Table1 t
JOIN Table2 u ON u.id = t.id
JOIN Table3 w ON w.id = t.id
WHERE t.x = 0.0
AND t.y = 0.0
一些注意事项:
如果表2
或表3
中没有“匹配”id值,则将不会从表1
中为该id
返回任何行
在MySQL中,不需要包含internal
关键字,省略对语句的执行方式没有影响
当查询引用多个表时,最好限定所有列引用,而不仅仅是那些列名冲突的列引用。(当有人将名为x
的列添加到表3时,您的查询将停止工作,并开始抛出“不明确列”错误。)
我更喜欢为每个表分配一个短别名,并用别名限定列名
SELECT t.id
, t.x
, t.y
, u.a
, u.b
, v.c
, v.d
FROM Table1 t
JOIN Table2 u ON u.id = t.id
JOIN Table3 w ON w.id = t.id
WHERE t.x = 0.0
AND t.y = 0.0