#sql-server
#sql-сервер
Вопрос:
Я пытаюсь проверить, доступна ли введенная книга no или нет. Я использовал BOOK
таблицу, в которую добавлены все книги. Есть еще одна таблица с именем, BORROWED
где Issuedate
перечислены Returndate
. Вот запрос
select *
from BORROWED, BOOK
where BookCode = ?
and BORROWED.BookCode = BOOK.BookCode
and BORROWED.Returned is null
Но показывает эту ошибку :
Неоднозначное имя столбца ‘BookCode’
Комментарии:
1. Вредные привычки, от которых следует отказаться: использование объединений в старом стиле — этот стиль списка таблиц, разделенных запятыми, в старом стиле был заменен на надлежащий синтаксис ANSI в стандарте ANSI-
JOIN
92 SQL ( более 20 лет назад), и его использование не рекомендуется………………….. (
Ответ №1:
В обеих таблицах у вас есть столбец с именем BookCode
. Вам нужно назвать таблицу. В противном случае DB engines не знает, какую из них вы имеете в виду.
SELECT *
FROM BORROWED
JOIN BOOK ON BORROWED.BookCode = BOOK.BookCode
WHERE BORROWED.BookCode = ?
AND BORROWED.Returned IS NULL
Ответ №2:
Вы можете использовать псевдонимы и присоединяться
SELECT `b`.*
FROM `BORROWED` `b`
INNER JOIN `BOOK` AS `c` ON `c`.`BookCode` = `b`.`BookCode`
WHERE `b.`BookCode` = ?
AND `b`.`Returned` IS NULL
Ответ №3:
Это сообщение об ошибке генерируется из-за того, что обе ваши таблицы имеют одинаковое имя столбца. Чтобы предотвратить ошибки такого типа, привыкайте использовать псевдонимы в своих запросах:
SELECT *
FROM BORROWED AS br
JOIN BOOK AS b
ON b.BookCode = br.BookCode
WHERE
br.BookCode = ?
AND br.Returned IS NULL