繁体   English   中英

MySQL查询从多个表?

[英]MySQL query from multiple tables?

我有两个表,分别名为table_1table_2 该模式如下。

表格1

+----+--------+-----+------------+
| id | reg_no | ... | table_2_id |
+----+--------+-----+------------+

table_2

+----+-----+
| id | ... |
+----+-----+

table_1的列table_2_id引用table_2的列id 现在,我必须得到table_2_id特定reg_no ,然后使用该table_2_id从中获取数据table_2

我目前这样做如下,并且可以正常工作。

$stmt = $this->conn->prepare("SELECT table_2_id from table_1 WHERE reg_no = ?");
$stmt->bind_param("s", $reg_no);
$stmt->execute();
$stmt->bind_result($table_2_id);
$stmt->fetch();
$stmt->close();
$stmt = $this->conn->prepare("SELECT * from table_1 WHERE id = ?");
$stmt->bind_param("i", $table_2_id);
$stmt->execute();
...  

这是正确的方法吗? 还有其他更有效的查询来执行此任务吗?

使用join查询

SELECT t2.* 
FROM table_1 t1
JOIN table_2 t2 ON t1.table_2_id = t2.id
WHERE t2.t1reg_no = ?

尝试

SELECT T2.* FROM table_2 T2 
LEFT JOIN table_1 T1 ON T1.table_2_id = T2.id 
WHERE T1.reg_no = ?;

表格1

id   reg_no   table_2_id
1     001        1
2     002        2
3     003        4 
4     004        7
5     005        8

table_2

id  column_test
1      A
2      B
3      C
4      D
5      E
6      F
7      G

询问

SELECT T2.* FROM table_2 T2 
LEFT JOIN table_1 T1 ON T1.table_2_id = T2.id 
WHERE T1.reg_no = 003;

输出量

id  column_test
4     D

使用这样的一个查询来执行此操作应该更有效:

SELECT table_2.* 
FROM table_1 LEFT JOIN table_2 ON table_1.table_2_id=table_2.id 
WHERE table_1.reg_no = ?

table_1 LEFT JOIN table_2 ON table_1.table_2_id=table_2.id将连接table_1和table_2。 更具体地说,它将创建一个表,其中将包含来自table_1和table_2的所有列,然后将其放入来自table_1的所有行。 同样,当table_2中有一行ID与table_2_id相同的行时,它也会填充table_2的列。

上述操作将仅限于table_1.reg_no = ?

最后,使用SELECT table_2.* ,就像您的示例一样,我们仅从SELECT table_2.*获得列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM