Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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
Mysql 从联接表中选择所有内容_Mysql_Sql_Select - Fatal编程技术网

Mysql 从联接表中选择所有内容

Mysql 从联接表中选择所有内容,mysql,sql,select,Mysql,Sql,Select,我有两个连接的表: SELECT table1.*, table2.* FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.t1_id 问题:在查询结果中,id是否总是从SELECT语句中定义的辅助表中获取 例如: 如果我使用选择t1.*,t2.*-结果中的id将是t2.id 如果我使用选择t2.*,t1.*-id将是t1.id 使用“合并”结果是一种好的做法,还是应该避免歧义,始终严格定义列?我的建议是使用带别名的tablename,然后像这样

我有两个连接的表:

SELECT table1.*, table2.* FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.t1_id
问题:在查询结果中,id是否总是从SELECT语句中定义的辅助表中获取

例如:

如果我使用
选择t1.*,t2.*
-结果中的id将是t2.id

如果我使用
选择t2.*,t1.*
-id将是t1.id


使用“合并”结果是一种好的做法,还是应该避免歧义,始终严格定义列?

我的建议是使用带别名的tablename,然后像这样使用。最好的做法是运行查询。即使它有许多列,也要提到您的列名。您可以订购显示器

 SELECT t1.columnName1, t2.columnName2 FROM tablename1 t1 INNER JOIN tablename2 t2 ON t1.id = t2.id

不,sql查询将返回所有表中具有相同名称的所有列,而不仅仅是最后一列,除非您使用自然联接(
table1内部联接table2使用(列)

如果使用某种将结果存储在关联数组中的组件,则这些组件通常仅使用字段名作为键,因此它们仅从具有相同名称的字段中返回最后一列的值


但是,如果要返回数据库中多个同名列,最好使用别名。

在我的希望中,您回答自己:尽量避免歧义。使用星号选择器几乎总是被认为是不好的做法。我同意@AlessandroCifani。一般来说,手动运行一次性查询时,使用
*
只是为了方便。我认为,这没有什么区别。因为两个表中的两个id都是相同的,在运行查询之后,它会获取所有可能的结果。@Pokies:他将
t1.id
t2.t1_id
连接,而不是与
t2.id
连接,所以我相信它们不会是相同的。我认为,它们在不同的字段名中是相同的。当您连接两个表时,您应该知道,您连接的字段应该具有相同的域,并且实际上具有相同的类型。在这种情况下,你考虑连接概念@ alestand RooCiFiiIn,示例查询不使用Aias.OK,那么T1和T2在这里有什么用呢?它不是别名??感谢它们是表别名,但不是字段别名。问题是字段名。哦,现在我明白了。我忘了提到我使用的是laravel eloquent,所以它会返回关联数组,这就是为什么我只得到一个id。我这么问是因为当你有很多列时,它们在代码上下文中看起来不是很好。非常感谢。