1

我有两个(或三个,或四个......)表,我想一次选择所有表来计算所有表中的条目数。

例如,如果我有一些表格:“新闻”、“文章”、“画廊”

在每个表中,我都有一个名为“author_id”的行

现在,如果我使用以下选择语句:

SELECT *
FROM
news as n, articles as a, galleries as g
WHERE
n.author = 1
AND a.user = 1
AND g.uploader = 1

如果每个表至少有一行与匹配“1”的作者(或用户或上传者)匹配,我只会得到结果即使一个(或两个..)表不包含“1”我如何获得结果

4

3 回答 3

1

UNION ALL或者,您可以在子查询中组合使用所有表的结果。然后你现在可以COUNT()指定Author_ID. author_id以下查询将获取所有表中指定的记录总数。

SELECT COUNT(author_ID)
FROM
(
    SELECT userID AS Author_ID FROM news
    UNION ALL
    SELECT user_ID AS Author_ID FROM articles
    UNION ALL
    SELECT UiD AS Author_ID FROM galleries
) a
WHERE a.Author_ID = 1

后续问题,

  • 您希望如何显示结果?因为这也可以通过加入表格来解决。
  • 或者您要计算记录的主表和引用表是什么?
于 2012-10-09T05:48:50.423 回答
0

您必须使用字段从每个表中显示,例如

SELECT n.author, a.user, g.uploader FROM news as n, articles as a, galleries as g
WHERE n.author = 1 AND a.user = 1 AND g.uploader = 1

然后它将起作用

于 2012-10-09T05:48:56.603 回答
0

您的news表似乎是父表,因此您应该LEFT JOIN使用articlesgalleriesnews来获取作者的数量,如下所示:

SELECT * 
FROM 
    news n
    LEFT JOIN articles a
    ON n.author_id = a.author_id AND a.user = 1
    LEFT JOIN galleries g
    ON n.author_id = g.authori_id AND g.uploader = 1
于 2012-10-09T05:50:56.383 回答