Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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_Join - Fatal编程技术网

Mysql 如何只连接一列?

Mysql 如何只连接一列?,mysql,join,Mysql,Join,我只需要连接表2中的一列,比如first_name。 我该怎么做呢?假设您的意思是“从表2中选择一列”: 你的意思是除了你已经提出的问题之外: SELECT table1.*, table2.first_name FROM table1 LEFT JOIN table2 ... 接受的答案是正确的,但当表位于两个不同的数据库中时,我遇到了一个奇怪的错误: 假设table1在database1中,table2在database2中。 最初,我尝试了以下方法: SELECT * F

我只需要连接表2中的一列,比如first_name。 我该怎么做呢?

假设您的意思是“从表2中选择一列”:


你的意思是除了你已经提出的问题之外:

   SELECT table1.*, table2.first_name
     FROM table1
LEFT JOIN table2
...

接受的答案是正确的,但当表位于两个不同的数据库中时,我遇到了一个奇怪的错误:

假设table1在database1中,table2在database2中。 最初,我尝试了以下方法:

SELECT * FROM table1
LEFT JOIN table2
ON table1.id = table2.table1_id
WHERE table1.id = 1 and table1.first_name = table2.first_name
奇怪的是,如果我尝试从PHP PDO执行此查询,则没有错误,但结果包含database2.table2中的所有列(预期只有first_name列)

但是,如果我尝试了来自phpmyadmin的相同查询,则会出现sintax错误:

表“database2.table1”不存在

因此,为了解决这个问题,需要隐式指定所有数据库,如下所示:

SELECT *, database2.table2.first_name 
FROM table1
LEFT JOIN database2.table2
ON database1.table1.id = database2.table2.table1_id
WHERE table1.id = 1

将原始代码替换为表1.*,表2.YourChosenColumn

SELECT database1.table1.*, database2.table2.first_name 
FROM database1.table1
LEFT JOIN database2.table2
ON database1.table1.id = database2.table2.table1_id
WHERE database1.table1.id = 1

不,这不是我的意思,表1中没有名字,我只需要表2中的名字。谢谢你的回答:)完全正确。而且,到目前为止没有人提到的是,显性比隐性好;最好列出想要的列,而不是只说“全部”很好,这就是我想要的,非常感谢NullUserException:)这个答案产生了所需的功能结果,但它没有解决效率/性能的根本问题:从概念上讲,首先执行联接(包括两个表中的所有字段)然后,只有指定的Select语句列被过滤到最终结果中。但是,出于效率考虑,有没有一种方法可以显式地从表2中只指定“first_name”列的联接?还是所有的现代优化器都会自动这么做?
SELECT database1.table1.*, database2.table2.first_name 
FROM database1.table1
LEFT JOIN database2.table2
ON database1.table1.id = database2.table2.table1_id
WHERE database1.table1.id = 1
 SELECT table1.*, table2.YourChosenColumn
 FROM table1 LEFT JOIN table2 
 ON table1.id = table2.table1_id 
 WHERE table1.id = 1