Как использовать вложенные операторы SELECT в SQL?
У меня есть две таблицы как
Книга
+------+--------------+--------+----------+
| 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 |
+------+-----------------+---------+
Итак, как вы можете видеть, имя таблицы второй таблицы (luc13) является элементом первой таблицы книг. Поэтому при отображении второй таблицы я не хочу указывать ее имя, поэтому я пишу запрос
SELECT * FROM (SELECT b_id FROM book WHERE bkey = 1)
и это показывает ошибку,
ОШИБКА 1248 (42000): каждая производная таблица должна иметь свой псевдоним
Поэтому я искал его и снова написал запрос
SELECT * FROM (SELECT b_id FROM book WHERE bkey = 1 AS custom)
Теперь ошибка устранена, но все равно вывод
+-------+
| b_id |
+-------+
| luc13 |
+-------+
Так что думаю только SELECT b_id FROM book WHERE bkey = 1
выполнен. Так есть ли способ отобразить мою таблицу luc13 без указания ее имени?
1 ответ
Решение
Вы должны использовать prepared statement
за это:
SET @s := CONCAT('SELECT * FROM ', (SELECT b_id FROM book WHERE bkey = 1));
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;