[英]MySQL query from multiple tables?
我有两个表,分别名为table_1
和table_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.