如何在sql中使用嵌套的SELECT语句?
How to use nested SELECT statements in sql?
我有两个 table 作为
书本
+------+--------------+--------+----------+
| bkey | bname | nochap | b_id |
+------+--------------+--------+----------+
| 1 | Let Us C | 17 | luc13 |
| 2 | OOP with C++ | 17 | oopwcpp6 |
+------+--------------+--------+----------+
和
luc13
+------+-----------------+---------+
| cnum | cname | c_id |
+------+-----------------+---------+
| 1 | Getting Started | luc13gs |
| 2 | C Instructions | luc13ci |
+------+-----------------+---------+
因此,如您所见,第二个 table 的 table 名称 (luc13) 是第一个 table 本书。所以在显示第二个 table 时,我不想指定它的名称,所以我写了查询
SELECT * FROM (SELECT b_id FROM book WHERE bkey = 1)
及其显示错误,
错误 1248 (42000):每个派生的 table 必须有自己的别名
所以我搜索了一下,又写了查询
SELECT * FROM (SELECT b_id FROM book WHERE bkey = 1 AS custom)
现在错误已消除,但输出仍然是
+-------+
| b_id |
+-------+
| luc13 |
+-------+
所以我认为只有SELECT b_id FROM book WHERE bkey = 1
被执行了。
那么有什么方法可以显示我的 table luc13 而不直接指定它的名字吗?
你必须为此使用 prepared statement
:
SET @s := CONCAT('SELECT * FROM ', (SELECT b_id FROM book WHERE bkey = 1));
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我有两个 table 作为
书本
+------+--------------+--------+----------+
| bkey | bname | nochap | b_id |
+------+--------------+--------+----------+
| 1 | Let Us C | 17 | luc13 |
| 2 | OOP with C++ | 17 | oopwcpp6 |
+------+--------------+--------+----------+
和
luc13
+------+-----------------+---------+
| cnum | cname | c_id |
+------+-----------------+---------+
| 1 | Getting Started | luc13gs |
| 2 | C Instructions | luc13ci |
+------+-----------------+---------+
因此,如您所见,第二个 table 的 table 名称 (luc13) 是第一个 table 本书。所以在显示第二个 table 时,我不想指定它的名称,所以我写了查询
SELECT * FROM (SELECT b_id FROM book WHERE bkey = 1)
及其显示错误,
错误 1248 (42000):每个派生的 table 必须有自己的别名
所以我搜索了一下,又写了查询
SELECT * FROM (SELECT b_id FROM book WHERE bkey = 1 AS custom)
现在错误已消除,但输出仍然是
+-------+
| b_id |
+-------+
| luc13 |
+-------+
所以我认为只有SELECT b_id FROM book WHERE bkey = 1
被执行了。
那么有什么方法可以显示我的 table luc13 而不直接指定它的名字吗?
你必须为此使用 prepared statement
:
SET @s := CONCAT('SELECT * FROM ', (SELECT b_id FROM book WHERE bkey = 1));
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;