Mysql 在子查询中使用*

Mysql 在子查询中使用*,mysql,sql,Mysql,Sql,我有两个表:finaldata和finalqualification,finlpcqlfctin_Qlifitins_id是finaldata中的外键,即finalqualification表中的主键。 我想通过MYSQL中的子查询获取这两个表中的所有数据,但它显示了一个错误。我的问题是: SELECT result.name FROM (SELECT * FROM finalpocpassportdata f LEFT JOIN finalpocqualification q ON f.i

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

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

这里有一个快速提示-如果子查询返回多个同名列,它将被忽略。我们强烈使用一致的字段名为所有数据提供GUID,例如customerGUID,因此我经常遇到这种情况。尤其是在使用带有联接的子查询时

子查询返回的值大于

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)
这是您的查询:

SELECT result.name
FROM (SELECT  *
      FROM finalpocpassportdata f LEFT JOIN
           finalpocqualification q
           ON f.id = q.id
     ) result;
显然,这是一个测试查询,因为子查询是不必要的,并且会对性能产生不利影响

同样明显的是,SELECT*有两个名称为id的列。它可能还有其他名称相同的列。但是,如果id是唯一的副本,那么一个简单的解决方案是使用:

虽然自然连接也是一种选择,但我强烈建议不要在这里或任何地方使用它。这只是等待发生的错误

如果有其他列具有相同的名称(这可能是出于非常合理的目的),则可以单独列出这些列。这有时是一种痛苦,对一个表和另一个表中的列表使用*更容易:

SELECT . . .
FROM (SELECT f.*, q.name
      . . .

实际上,我看不出有必要使用这种子查询。几乎不需要将联接作为子查询,因为在一个FROM子句中可以有多个联接。

我不这样认为,要获得需要子查询的名称

SELECT  name FROM  finalpocpassportdata f LEFT JOIN 
finalpocqualification q ON f.id=q.id

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

您会得到哪个错误?我认为您的on子句f.id=f.finlpcqlfctin\u qlifitins\u id有问题您在同一个表中的列上加入?两个表中的列名相同?抱歉,我编写了错误的代码,现在我已经更改了代码。您修改的代码根本没有使用finlpcqlfctin\u qlifitins\u id提到的列。这与问题有关吗?你能最终提供你得到的错误文本吗?
SELECT  name FROM  finalpocpassportdata f LEFT JOIN 
finalpocqualification q ON f.id=q.id