在子查询中使用*

时间:2016-01-15 11:25:04

标签: mysql sql

我有两个表:finaldatafinalqualificationfinlpcqlfctin_qlifictins_idfinaldata中的外键,即finalqualification表中的主键。 我想通过MYSQL中的子查询从这两个表中获取所有数据,但它显示错误。我的疑问是:

SELECT result.name FROM (SELECT  * FROM  finalpocpassportdata f LEFT JOIN finalpocqualification q ON f.id=q.id)result

4 个答案:

答案 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

此查询也会给出相同的结果。