Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索与JOIN共享公共字段的MySQL记录_Mysql_Join - Fatal编程技术网

检索与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