переформулировать подзапрос, используя соединение

0

Требование состоит в том, чтобы найти все книги, которые имеют тот же предметный код, что и книга с названием "Искусство Уолта Диснея", используя табличное соединение вместо подзапроса, как показано ниже, которое я написал. Проблема, с которой я сталкиваюсь, заключается в том, что я не совсем уверен в том, как фильтровать результаты на основе требуемых критериев, не используя подзапрос, чтобы сделать это. Вот что я до сих пор

SELECT ISBN, Title, Subject_Code
FROM Book
where Subject_Code = Book.subject_Code
ORDER BY Title;

Это мое выражение о создании, чтобы выяснить, с какими таблицами я работаю. Спасибо!

CREATE TABLE IF NOT EXISTS subject
    (SubjectCode nvarchar(3) PRIMARY KEY NOT NULL, 
    Subject nvarchar(15)); 




CREATE TABLE IF NOT EXISTS Book 
    (ISBN nvarchar(13) PRIMARY KEY NOT NULL, Title nvarchar(50), Author nvarchar(30),
    Publisher nvarchar(30), 
    Subject_Code nvarchar(3),
    Shelf_Location nvarchar(7), Fiction bit(1), 
    FOREIGN KEY (Subject_Code) REFERENCES subject(SubjectCode));
  • 0
    Вы приземлитесь с автоматическим соединением, что совершенно законно. Хотя это подразумевает, что ваша БД не нормализована (похоже, значения не являются атомарными в таблице Book).
Теги:
join

2 ответа

2
Лучший ответ

В SQL вы можете присоединиться к таблице с самим собой. Рассмотрим следующее:

SELECT b2.ISBN, b2.Title, b2.Subject_Code
FROM Book b1
LEFT JOIN Book b2 ON b1.Subject_Code = b2.Subject_Code
WHERE b1.Title = "The Art of Walt Disney"
  • 0
    Я вроде понимаю ответ, но не голос против.
  • 0
    Не я, но я представляю это, потому что он побил тебя на 11 секунд
2

Вы можете сделать это, используя самоподключение:

select b.*
from book b join
     book bwd
     on b.subject_code = bwd.subject_code
where bdw.title = 'The Art of Walt Disney'
order by title;

Условие может идти либо в условии on либо в условии where.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню