Как использовать вложенные операторы 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;
Другие вопросы по тегам