我正在使用500行SQL查询,因此,我将尝试使用一个更简单的示例。...
假设我有一个具有Books
,Book_id
和Author
列的表Title
,具有发布者信息的表Publisher
和一个包含Translations
,Book_id
和Title
列。
我想Language
来自某个出版商的所有书籍,无论它们是否已被翻译成西班牙语,但我确实想显示一列包含SELECT
的列(如果它们具有西班牙语翻译。
因此,假设我的查询是true
。如何从可以多次包含同一本书或多次包含同一本书的表中得出西班牙语列中的真值?
学习使用正确的,明确的,标准 SELECT Author, Title, Spanish FROM Books, Translations WHERE Publisher.Book_id = Books.Book_id AND Translations.Book_id = Books.Book_id AND Publisher_id = 1
语法!我确实希望您不要有500行使用逗号进行联接的代码。
您想要一个JOIN
和left join
表达式:
case
注意:这使用SELECT b.Author, b.Title,
(CASE WHEN t.Book_id IS NOT NULL THEN 'true' ELSE 'false' END) as spanish_flag
FROM Books b LEFT JOIN
Translations t
ON t.Book_id = b.Book_id AND
t.language = 'Spanish'
WHERE b.Publisher_id = 1;
/ 'true'
的字符串表示形式。您尚未指定数据库。有些直接支持布尔值。
实际上,假设一本书可以对一种语言进行多种翻译。编写查询的更自然的方法是使用'false'
:
EXISTS