【问题标题】:Join is not working properly加入工作不正常
【发布时间】:2016-07-18 15:25:22
【问题描述】:

我是 SQL 新手,正在尝试使用联接获取数据。不知道我做错了什么。我有两张桌子。


record

recordID|activityName|userID 1 | sale | 5 2 | call | 5 3 | contact | 5

activity

activityID|activityData|userID 1 | 50 | 5 2 | 70 | 5 3 | xyz | 5

结果应该是

recordID|activityName|activityData|userID 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5

但它会返回

recordID|activityName|activityData|userID 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5

SELECT * FROM tblrecord tr, tblactivity ta WHERE tr.userID = ta.userID AND tr.userID = '5'

为什么会重复这个结果。

PS。 userID 是唯一的公共字段,activityID 和recordID 可以不同。

【问题讨论】:

  • 您要求获取与userId=5 对应的所有活动和记录组合在。如果这不是您需要的,那么您必须告诉我们您确实需要什么,我们可以告诉您查询错误的原因。
  • 我只想显示两个表的数据而不重复

标签: php sql join


【解决方案1】:

首先,遵循一个简单的规则:从不FROM 子句中使用逗号。 总是使用明确的JOIN 语法。

其次,您似乎想加入recordIdactivityId

SELECT *
FROM tblrecord tr JOIN
     tblactivity ta 
     ON  tr.userID = ta.userID AND
         tr.recordId = ta.activityId
WHERE tr.userID = 5;

另外,如果值确实是数字,请不要使用单引号。

【讨论】:

  • 好吧,我不同意“从不使用逗号”的规则。相反,请遵循规则“如果您不知道术语 cross productcartesian product 或者您知道它们不是您需要的,请不要在 @ 中使用逗号987654326@子句"
  • 其实userID是唯一的公共字段。一个用户可以有多个记录,并且activityID和recordID可以不同。
  • @apokryfos 如果你打算做一个交叉产品,你应该使用明确的CROSS JOIN。 from 子句中的逗号在 ANSI-92 中消失。
  • @apokryfos 。 . . 从不使用逗号。如果这是您的意图,请使用 cross join
  • @SamB 。 . .也许你应该用更好的样本数据问另一个问题。修改这个问题是不礼貌的,因为它会使答案无效,这似乎是正确的。 有答案之后更改问题可能会导致对答案的否决。
【解决方案2】:

添加

按用户 ID、活动 ID 分组

您的查询。

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2020-04-23
    • 2023-04-10
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多