我有两个表:finaldata
和finalqualification
,finlpcqlfctin_qlifictins_id
是finaldata
中的外键,即finalqualification
表中的主键。
我想通过MYSQL中的子查询从这两个表中获取所有数据,但它显示错误。我的疑问是:
SELECT result.name FROM (SELECT * FROM finalpocpassportdata f LEFT JOIN finalpocqualification q ON f.id=q.id)result
答案 0 :(得分:0)
快速提示此处 - 如果您的子查询返回多个具有相同名称的列,它将会被覆盖。我们强烈地使用一致的字段名称来指导我们所有的数据,例如。 customerGUID,所以我经常遇到这个问题。特别是在使用带有连接的子查询时。
答案 1 :(得分:0)
您的子查询返回的值超过了值
SELECT result.name FROM (SELECT * FROM finaldata f LEFT JOIN finalqualification ON f.id=f.finlpcqlfctin_qlifictins_id)
您需要在别名中指定列的名称
SELECT result.name FROM (SELECT only_one_column FROM finaldata f LEFT JOIN finalqualification ON f.id=finalqualification .finlpcqlfctin_qlifictins_id)
答案 2 :(得分:0)
这是您的查询:
SELECT result.name
FROM (SELECT *
FROM finalpocpassportdata f LEFT JOIN
finalpocqualification q
ON f.id = q.id
) result;
显然,这是一个测试查询,因为子查询是不必要的,会对性能产生负面影响。
同样明显的是,SELECT *
有两列名为id
的列。它可能还有其他具有相同名称的列。但是,如果id
是唯一的重复项,那么一个简单的解决方案就是使用USING
:
SELECT result.name
FROM (SELECT *
FROM finalpocpassportdata f LEFT JOIN
finalpocqualification q
USING (id)
) result;
(虽然NATURAL JOIN
也是一个选项,但我强烈建议不要在这里或任何地方使用它。这只是等待发生的错误。)
如果有其他具有相同名称的列 - 这可能是出于非常合理的目的 - 那么您可以单独列出列。这有时是一种痛苦,可以更容易地将*
用于一个表并列出另一个表:
SELECT . . .
FROM (SELECT f.*, q.name
. . .
在实践中,我看不出需要这种子查询。几乎不需要将连接作为子查询进行,因为在单个FROM
子句中可以有许多连接。
答案 3 :(得分:0)
我不这么认为你得到名字需要子查询
SELECT name FROM finalpocpassportdata f LEFT JOIN
finalpocqualification q ON f.id=q.id
此查询也会给出相同的结果。