SQL 选择 - 某些行不会显示

Posted

技术标签:

【中文标题】SQL 选择 - 某些行不会显示【英文标题】:SQL Select - Some Rows Won't Display 【发布时间】:2013-09-01 23:49:52 【问题描述】:

我有两张桌子。其中一个名为files,并且有所有文件的所有列表。第二个表名为payments,其中有一些文件的付款清单。

付款:

id | fileid | ...
 1   2
 2   3
 3   2

文件:

id | ...
1
2
3

我想选择所有文件,并加入表 payments 以按此表的计数排序。

在这种情况下,第一行将是文件 #2,因为它在 payments 表中重复次数最多。

我尝试这样做,但当我这样做时 - 并非所有行都显示!

我认为这是因为并非所有文件都在 payments 表中。所以在这种情况下,我认为它不会显示第一行。

谢谢,对不起我的英语

P.S:我用的是mysql引擎

** 更新 ** 我的代码:

            SELECT      `id`,`name`,`size`,`downloads`,`upload_date`,`server_ip`,COUNT(`uploadid`) AS numProfits
            FROM        `uploads` 
            JOIN        `profits`
            ON          `uploads`.`id` = `profits`.`uploadid`
            WHERE       `uploads`.`userid` = 1
            AND         `removed` = 0
            ORDER BY    numProfits

【问题讨论】:

您能否提供您对示例数据的期望输出?还有您尝试过的查询。 你的SQL语句是什么?您可能会遇到内连接和外连接之间的区别。 我把我的代码,请看更新 【参考方案1】:

试试LEFT JOIN——在MySQL中,默认的JOIN实际上是INNER JOIN。在INNER JOIN 中,您只会得到连接两边的结果。

见:Difference in MySQL JOIN vs LEFT JOIN

并且,如 cmets 中所述,您可能还需要一个 GROUP BY 和您的 COUNT,以防止它只计算所有返回的行。

【讨论】:

它只返回一行。 uploads 表是否与您在示例中提到的files 表相同?我无法弄清楚如何在执行LEFT JOIN 时获得更少的行数(根据定义,它返回的数字与INNER JOIN 相同或更大)。 我写了files,但我提到了uploads 我认为他只得到一行的原因与计数和缺少 GROUP BY 之间的相互作用有关。虽然我不确定细节。指定组可以解决问题。 - 确实,INNER JOIN 也只返回一行,但支付表中有三行 - 因此计数为三。 @ArielAharonson Count 是一个聚合运算符 - 我会检查,当您执行返回一行的查询时,返回的 COUNT 是否为三,如果是这样,请添加合适的GROUP BY【参考方案2】:

正如其他人所指出的,您需要使用 LEFT JOIN。 - 这告诉 MySQL 即使右侧表中不存在相应条目,也应包含左侧表中的条目。

您还应该使用 GROUP BY 来指示应如何分隔 COUNT。

所以 SQL 应该是这样的;

SELECT Files.ID, count(Payments.FileID) as numpays FROM
Files
LEFT OUTER JOIN
Payments
ON Files.id=Payments.FileID
GROUP BY files.ID
ORDER BY numpays desc

SQL Fiddle

【讨论】:

【参考方案3】:

试试这个:

select B.fileid,A......
from
(select id,.....
from files A
inner join
(select count(*),fileid,.....
from payments
group by fileid) B
on files.id=payments.fileid)

我希望这会有所帮助。我假设 files 表中的所有 ID 都是唯一的。在此答案中,您可以根据自己的意愿应用 order by 子句。我已将 select 语句留给您选择要获取的任何数据。

就您所描述的问题而言,我认为这应该可行。如果有任何问题,请发表评论。

【讨论】:

以上是关于SQL 选择 - 某些行不会显示的主要内容,如果未能解决你的问题,请参考以下文章

sql 显示如何选择某些列内容的COUNT和SUM。第1行从Customers表中选择列,以及COUNT

在滚动触发之前,某些项目不会显示在 SectionList 中

SQL 结果中选择的行

如何使用 HTML 列表框和 SQL 代码显示表格中的某些列?

放置在代码的某些行之间时,数组内容显示不佳

选择独立行并将它们显示为单行 (ORACLE SQL)