Mysql 如何正确使用JOIN?
我有两个表和一个外键索引表: 表xymply\u位置 身份证件 名称 拉特 液化天然气 我想选择分配给locid 1的类别。我怎么做,我试过了Mysql 如何正确使用JOIN?,mysql,database,join,Mysql,Database,Join,我有两个表和一个外键索引表: 表xymply\u位置 身份证件 名称 拉特 液化天然气 我想选择分配给locid 1的类别。我怎么做,我试过了 SELECT * FROM `xymply_categoryf_key`, xymply_categories JOIN `xymply_categories` ON xymply_categories.id = xymply_categoryf_key.catid WHERE locid = 1; 但是我得到了“不是唯一的表/
SELECT *
FROM `xymply_categoryf_key`, xymply_categories
JOIN `xymply_categories` ON
xymply_categories.id = xymply_categoryf_key.catid
WHERE locid = 1;
但是我得到了“不是唯一的表/别名:'xymply_categories'”
,我想知道为什么 代码中混合了隐式(FROM子句中列出的所有表)和显式联接样式,因此出现了错误
SELECT xc.id, xc.name
FROM xymply_categories xc
INNER JOIN xymply_categoryf_key xck
ON xc.id = xck.catid
WHERE xck.locid = 1;
因为您要两次“加入”xymply_类别,所以db需要表的别名,以便在选择列时知道要转到哪个别名
根据需要,您可以通过多种方式进行连接。一个笔直的内部连接(看起来是您想要的)可以是
或者你也可以像Joe Stefanelli展示的那样进行显式的内部连接。这两种方法中的任何一种都会提供记录,其中每个表都有匹配的信息 在查询中,您从两个表中进行选择。其中一个是
xymply\u categoryf\u key
,另一个是xymply\u categories
的两个实例的JOIN
。您使用的是同一个表的两个实例,因此当您编写xymply\u categories.id
时,不清楚您指的是哪个实例-是JOIN
的第一个参数,还是第二个参数?这就是“非唯一表/别名”
的意思。如果我正确理解您想要做什么,请尝试以下操作:
SELECT c.id, c.name FROM xymply_categories c, xymply_categoryf_key k WHERE c.id = k.catid AND k.locid = 1;
这是在没有联接的情况下完成的,尽管
WHERE c.id = k.catid
加入可能会更快,我不确定。另外,请注意使用k
和c
作为表xymply\u categoryf\u key
(k
表示key)和xymply\u categories c
(c
表示categories)的别名。这就是如何避免以前出现的“表/别名不唯一”问题。在你的情况下,你会使用
xymply_categories a JOIN xymply_categories b WHERE a.id = ...
因此,尽管我给出了一个示例,说明如何在不使用JOIN
的情况下编写查询-正如我所提到的,使用JOIN
可能会生成更快的查询。因此,您所要做的就是添加别名。您实际上要做两个连接,一个是隐式连接来自
表的两个,另一个是显式连接。因此,您已经包含了两次xymply_类别,这导致了您的错误。
WHERE c.id = k.catid
xymply_categories a JOIN xymply_categories b WHERE a.id = ...