bgc*_*ode 1 mysql join left-join
我有一个表书籍,我存储书籍数据(ISBN,标题,作者等).为了说明哪些书是彼此的版本,我有一个字段Edition_Group_ISBN,这是该组中的任意ISBN.
我无法获得此查询,该查询应该为Book数据和基于ISBN的其他版本的数量提供工作:
SELECT *, Editions_Count
FROM Books
LEFT JOIN ((SELECT Edition_Group_ISBN, COUNT(*) AS Editions_Count
FROM Books
WHERE Edition_Group_ISBN IN (SELECT Edition_Group_ISBN
FROM Books)
GROUP BY Edition_Group_ISBN) AS b
) ON (Books.Edition_Group_ISBN = b.Edition_Group_ISBN
AND Books.Edition_Group_ISBN != NULL)
WHERE ISBN = 9780140447897
Run Code Online (Sandbox Code Playgroud)
该查询给出了9780140447897的书籍数据,但它给出了Editions_Count AS NULL,表明LEFT JOIN不起作用.
尝试这个更简单的查询:
SELECT b.*, COUNT(*) AS Editions_count
FROM Books b JOIN Books g USING (Edition_Group_ISBN)
WHERE b.ISBN = 9780140447897
GROUP BY b.book_id;
Run Code Online (Sandbox Code Playgroud)
我认为你提出的问题比你需要的要困难得多.您的原始查询充满了令人困惑的子查询,其中至少有一个完全是多余的.
你的意见:
是的,它可以通过这种方式将ISBN与多个值进行比较:
SELECT b.*, COUNT(*) AS Editions_count
FROM Books b JOIN Books g USING (Edition_Group_ISBN)
WHERE b.ISBN IN (9780140447897, 9781934356555)
GROUP BY b.book_id;
Run Code Online (Sandbox Code Playgroud)
COUNT(*)仅支持普通通配符*,这意味着计算组中的所有行.
或者您可以使用特定的表达式COUNT(g.Edition_Group_ISBN),这意味着计算该表达式为非null的组中的所有行.
但你不能使用,g.*因为它含糊不清.它是否计算组中的所有行?(如果是这样,只需使用COUNT(*))它是否计算组中的非空行?无论如何,这意味着什么 - 计算所有列g都是非空的行,或者任何列来自g非空的行?由于这些原因,COUNT(g.*)根本不是SQL语言中的法律构造.
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |