0

如果这看起来像是常识,请原谅我,因为我仍在学习如何在多个表之间拆分数据。

基本上,我有两个:

  • general与田野userID,owner,server,name
  • count与田野userID,posts,topics

我希望从他们那里获取数据,但无法决定我应该如何做:在一个 UNION 中:

SELECT `userID`, `owner`, `server`, `name`
FROM `english`.`general` 
WHERE `userID` = 54 LIMIT 1 
UNION
SELECT `posts`, `topics` 
FROM `english`.`count` 
WHERE `userID` = 54 LIMIT 1

或加入:

SELECT `general`.`userID`, `general`.`owner`, `general`.`server`, 
       `general`.`name`, `count`.`posts`, `count`.`topics` 
FROM `english`.`general` 
JOIN `english`.`count` ON 
     `general`.`userID`=`count`.`userID` AND `general`.`userID`=54 
LIMIT 1

您认为哪种方法更有效,为什么?或者也许两者都太乱了?

4

4 回答 4

2

这与效率无关,而与它们的工作方式有关。

UNION只是联合 2 个不同的独立查询。所以你一个接一个地得到 2 个结果集。

JOIN将一个结果集中的每一行附加到另一个结果集中的每一行。因此,在整个结果集中,您有“长”行(就列数而言)

于 2012-09-09T20:52:01.123 回答
1

只是为了完整性,因为我认为其他地方没有提到它:通常 UNION ALL 是人们使用 UNION 时的意图。

UNION 将删除重复项(因此相对昂贵,因为它需要排序)。这将删除最终结果中的重复项(因此,单个查询中是否存在重复项或来自单个 SELECT 的相同数据并不重要)。UNION 是一个集合操作。

UNION ALL 只是将结果粘在一起:没有排序,没有重复删除。这将比 UNION 更快(或至少不会更糟)。

如果您知道单个查询不会返回重复的结果,请使用 UNION ALL。(事实上​​,如果您需要这种行为,通常最好假设 UNION ALL 并考虑 UNION;将 SELECT DISTINCT 与 UNION 一起使用是多余的)。

于 2013-05-21T11:58:59.200 回答
0

您想使用 JOIN。连接用于创建单个集合,该集合是相关数据的组合。您的联合示例没有意义(并且可能不会运行)。UNION 用于链接具有相同列的两个结果集以创建具有组合行的集合(它不会“联合”列。)

于 2012-09-09T20:51:47.940 回答
0

如果您想获取用户并靠近用户帖子和主题。您需要使用 JOIN 编写 QUERY,如下所示:

SELECT general.*,count.posts,count.topics FROM general LEFT JOIN count ON general.userID=count.userID
于 2012-09-09T20:59:57.030 回答