Mysql 使用我们暗示要使用的索引 使用显式的JOIN作为开始,而不是WHERE:)中连接表的旧语法内部联接更具可读性。选择。。。从author.AuthorID=book.AuthorIDOP上的author-INNER-JOIN-book中,您过去的一些问题似乎
使用我们暗示要使用的索引Mysql 使用我们暗示要使用的索引 使用显式的JOIN作为开始,而不是WHERE:)中连接表的旧语法内部联接更具可读性。选择。。。从author.AuthorID=book.AuthorIDOP上的author-INNER-JOIN-book中,您过去的一些问题似乎,mysql,sql,Mysql,Sql,使用我们暗示要使用的索引 使用显式的JOIN作为开始,而不是WHERE:)中连接表的旧语法内部联接更具可读性。选择。。。从author.AuthorID=book.AuthorIDOP上的author-INNER-JOIN-book中,您过去的一些问题似乎已经得到了合理的回答。我建议您考虑回答这个问题和过去问题的答案之一,如果答案(S)已经帮助了您。使用不存在而不是不在< /代码>中,因为不在< /代码>结果中,当NULL返回时,不是很多人所期望的。1。请格式化文本以反映其解析。2.使用IN-p
使用显式的
JOIN
作为开始,而不是WHERE
:)中连接表的旧语法内部联接更具可读性。选择。。。从author.AuthorID=book.AuthorIDOP上的author-INNER-JOIN-book中,您过去的一些问题似乎已经得到了合理的回答。我建议您考虑回答这个问题和过去问题的答案之一,如果答案(S)已经帮助了您。使用<代码>不存在而不是<代码>不在< /代码>中,因为<代码>不在< /代码>结果中,当NULL返回时,不是很多人所期望的。1。请格式化文本以反映其解析。2.使用IN-plus子选择提示您可能会从学习在这些情况下如何简化联接中获益。PS事实证明,在选择中使用AS而不是在FROM中使用AS更安全。在开始时使用显式的JOIN
,而不是在WHERE
:)中使用连接表的旧语法内部联接更具可读性。选择。。。从author.AuthorID=book.AuthorIDOP上的author-INNER-JOIN-book中,您过去的一些问题似乎已经得到了合理的回答。我建议您考虑回答这个问题和过去问题的答案之一,如果答案(S)已经帮助了您。使用<代码>不存在而不是<代码>不在< /代码>中,因为<代码>不在< /代码>结果中,当NULL返回时,不是很多人所期望的。1。请格式化文本以反映其解析。2.使用IN-plus子选择提示您可能会从学习在这些情况下如何简化联接中获益。PS事实证明,在拼写方面,在SELECT中使用它比在FROM中使用它更安全。
SELECT w.BookID
FROM author as a, book as b, writes as w, publisher as p
WHERE a.LivingCityID != p.PublisherCityId AND w.AuthorID = a.ID AND w.BookID = b.ID AND p.ID = b.PublisherID
ORDER BY w.BookID ASC
SELECT DISTINCT PublisherID
FROM book
WHERE PublisherID NOT IN (SELECT PublisherID
FROM book
WHERE YearPublished >=1600 AND YearPublished <= 1900)
SELECT DISTINCT PublisherID
FROM book
WHERE PublisherID NOT IN (SELECT PublisherID
FROM book
WHERE YearPublished >=1600 AND YearPublished <= 1900)
AND PublisherID IN (SELECT PublisherID
FROM book
WHERE YearPublished < 1600)
AND PublisherID IN (SELECT PublisherID
FROM book
WHERE YearPublished > 1900)
SELECT w.BookID
FROM book b
LEFT JOIN writes w on w.bookid = book.id
LEFT JOIN author a on a.id = w.authorid
LEFT JOIN publisher p on p.id = b.publisherid
WHERE NOT a.LivingCityID = p.PublisherCityId
ORDER BY w.BookID ASC
SELECT DISTINCT publisherid
FROM book b
INNER JOIN publisher p on p.id = b.publisherid
WHERE NOT b.yearpublished BETWEEN 1600 and 1900
SELECT DISTINCT publisherid
FROM publisher p
WHERE EXISTS (
SELECT 1
FROM book
WHERE NOT yearpublished BETWEEN 1600 and 1900
AND publisherid = p.id
)
SELECT DISTINCT publisherid
FROM publisher p
WHERE EXISTS (
SELECT 1
FROM book
WHERE NOT yearpublished BETWEEN 1600 and 1900
AND publisherid = p.id
)
AND EXISTS (
SELECT 1
FROM book
WHERE yearpublished < 1600
AND publisherid = p.id
)
AND EXISTS (
SELECT 1
FROM book
WHERE yearpublished > 1900
AND publisherid = p.id
)
SELECT publisherid
FROM
(
SELECT DISTINCT
CASE WHEN yearpublished < 1600 THEN 1600 ELSE 1900 END AS yr,
publisherid
FROM book b
INNER JOIN publisher p on p.id = b.publisherid
WHERE NOT b.yearpublished BETWEEN 1600 and 1900
) t
GROUP BY yr
HAVING COUNT(*) = 2
1600 publisherid#1
1600 publisherid#1
1900 publisherid#1
1600 publisherid#2
1600 publisherid#3
1900 publisherid#3
...
1600 publisherid#1 |
1900 publisherid#1 | --> this and above record will become a group
1600 publisherid#2
1600 publisherid#3 |
1900 publisherid#3 | --> this and above record will become a group
...