如何在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;