【问题标题】:MySQL query to select distinct values from one table and all values from a separate tableMySQL查询从一个表中选择不同的值,并从一个单独的表中选择所有值
【发布时间】:2013-10-14 06:09:11
【问题描述】:

我有两张调查表。表 1 包含使用以下字段发送的调查:SID、SalesRep、Location。表 2 包含通过以下字段返回的调查结果:RID、SID、QID、AID。

在表 1 中,SID 是唯一的,并且没有重复。在表 2 中,RID 是唯一的,代表每个回答的问题和答案。表 2 中的 SID 代表已回答问题的调查。因此,如果在调查中回答了 10 个问题,那么表 2 中将有 10 行具有相同的 SID。

我需要做的是找出已经发送了多少调查,以及每个销售人员接受了多少调查。我可以使用两个查询分别查找信息:

  1. 从表 1 中选择 *
  2. SELECT DISTINCT Table2.SID, Table1.SalesRep,Table1.Location FROM Table2 INNER JOIN Table1 on Table1.SID = Table2.SID

我想做的是有一个查询会给我两个结果。我假设它需要某种 OUTER JOIN,因为 Table1 的结果会比 Table2 的结果多,因为我们没有得到 100% 的调查回报。但是,当我尝试运行 OUTER JOIN 时,它会锁定并且不返回任何内容。这些表目前还不是很大。

有人可以指出我正确的方向吗?这甚至可能吗?

【问题讨论】:

  • 给出一些数据和预期的结果。

标签: mysql join


【解决方案1】:

您对结果的指定不够好,但据我所知,您可以尝试一下,希望它有效
从表 1 中选择 *
SID 在哪里(从表 2 中选择不同的 SID)

如果不行请详细说明

【讨论】:

  • 感谢您的回复。我认为那只会给我一组结果。它将生成一份已发送且已回复的调查列表。我正在寻找的结果是产生用于比较的结果,所以我实际上需要两组结果,这样我就可以在报告中使用它们进行比较。例如,报表详细信息将包含:销售人员 1、位置 1、已发送调查 - 25、已进行调查 -10 |销售人员 1,位置 2,已发送调查 - 15,已进行调查 4 |销售人员 2,位置 2,已发送调查 - 30,已进行调查 - 20。
  • 您是否需要输出来显示表 2 中的所有 sid,即如果一个 sid 在表中出现 4 次,则它应该显示 4 次,并与表 2 中的其余 sid 一起显示包含所有细节
  • 不,我需要表 1 中的所有 sid 以及随附字段(销售人员、位置),以及表 2 中的不同 sid。最终结果,我需要计算表一中的所有 sid 和计数表 2 中的不同 sid。
  • 使用 unin od 两个查询,如 query1 UNION query2
  • 工会让我找到了正确的方向,谢谢。我最终合并了两个查询,并在每个 SID 的 Select 语句中连接了一个字符串,以区分哪些是 Sent 和 Taken。示例:SELECT CONCAT(COUNT(SID,'S')) AS SID...UNION SELECT CONCAT(COUNT(DISTINCT SID,'T')) AS SID。干得漂亮!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 2011-03-30
  • 2017-02-23
  • 2021-12-30
  • 2015-02-05
  • 2020-03-21
相关资源
最近更新 更多