【问题标题】:using AND condition MYsql [duplicate]使用AND条件MYsql [重复]
【发布时间】:2013-02-18 12:27:28
【问题描述】:

我需要的是:当我提供 training_id 172 和 training_id 174 时,它必须只返回用户 150

我试过了,但是没用

SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174

大多数时候 training_id 可能大于 2

【问题讨论】:

  • 你在这张表中的主键是什么?
  • user_id 和 training_id
  • 问题是您的 PK 在两个字段上,因此唯一性仅存在于两个字段中,因此您的查询方法不起作用。您还需要在查询中包含 user_id (WHERE user_id=150)
  • 请解释您的问题..给定的示例使您的问题令人困惑。
  • 您期待用户 150 作为回报。换句话说,您是否期待training_ids 上的最新user_id

标签: php mysql cakephp cakephp-1.3


【解决方案1】:

这个查询怎么样:

SELECT user_id, COUNT(*) as nbTrainings FROM Training_users
WHERE training_id = 172 OR training_id = 174
GROUP BY user_id
HAVING nbTrainings = 2

它将过滤具有训练 172 或 174 的用户。然后它将计算每个用户返回的训练有多少,并且只保留具有两次训练的用户。

这假设一个用户不能有多个训练 172 和/或 174

相对于多个自加入的优点是,如果您想过滤超过 2 个训练 id,则不必为每个训练 id 加入多次。

更多关于GROUP BYHAVINGhere的信息

编辑:在 sqlfiddle 中测试后,如果某些用户有多个 training_id 并且一个为 172 或 174,这似乎工作并且不会返回错误值

工作sqlfiddle

【讨论】:

  • 我也想过这种解决方案。让我们看看它是否足够。我放弃了这个,因为可能有一行用户 1 -> 172 和 65,然后是用户 2 -> 174 和 42。这个查询应该同时输出用户 1 和 2。
  • @iiro :刚刚在 sqlfiddle 中测试过,这似乎有效。它不计算除 172/174 之外的训练次数,因为这些行已经被过滤掉了。
  • 哦,是的,你是对的 :)
  • 谢谢我的朋友,我想这可能会奏效。我必须尝试返回多个用户,看看它是否有效:)
【解决方案2】:

这应该可行:

SELECT a.user_id FROM Training_users a, Training_users b WHERE a.training_id = 172 and a.user_id = b.user_id AND b.training_id = 174;

【讨论】:

    【解决方案3】:

    应该这样做:

    SELECT
      a.user_id
    FROM
      Training_users a
    RIGHT JOIN
      Training_users b ON a.user_id = b.user_id AND b.training_id = 174
    WHERE
      a.training_id = 172
    

    【讨论】:

      【解决方案4】:
      select user_id from work where training_id in (172,174) group by user_id  having count(*)  > 1;
      

      查看SQLFiddle Demo

      【讨论】:

        【解决方案5】:

        做这样的事情

        SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)
        

        【讨论】:

        • 这也将返回另一个用户 ID
        • @iiro 没有说需要唯一的用户 ID
        • @Vineet1982 "它只需要返回用户 150"
        • 这就像 -> SELECT user_id FROM Training_users WHERE training_id IN (172 , 174)
        猜你喜欢
        • 2016-04-24
        • 1970-01-01
        • 2021-02-13
        • 1970-01-01
        • 2013-09-23
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 2016-08-16
        相关资源
        最近更新 更多