【问题标题】:MySQL Query - help with selectionMySQL 查询 - 帮助选择
【发布时间】:2010-02-08 23:14:48
【问题描述】:

我正在尝试获取所有没有为 fid = 13 设置值或在 profile_values 中根本没有值的用户。我猜这有一个简单的解决方案,......但我只是没有看到它。非常感谢任何帮助或正确方向的观点。

(表 users 和 profile_values 都来自 Drupal。)

简化值:

uid   name  fid     value
1   user1    1       foo
1   user1    2       foo
2   user2    12      
2   user2    13      1265662514
3   user3    NULL    NULL
4   user4    NULL    NULL

我在尝试什么:

SELECT u.uid, u.name, pv.fid, pv.value
FROM users u 
LEFT JOIN profile_values pv ON pv.uid = u.uid  
WHERE u.status != 0
AND (pv.fid != 13 OR pv.fid IS NULL) 
GROUP BY u.uid

uid     name      fid     value
1     user1     1       foo
2     user2     12      foo 
3     user3     NULL    NULL
4     user4     NULL    NULL

我的问题是 user2 不应该存在,因为它的值在 fid = 13 中


感谢所有令人难以置信的快速和合格的答案,干杯!

【问题讨论】:

    标签: mysql drupal


    【解决方案1】:

    您想添加一个 AND 子句: AND u.uid NOT IN(从 fid=13 的 profile_values 中选择 uid)作为 bad_uids

    【讨论】:

    • 这行不通。看看下面我和安东尼的讨论
    • 实际上,这似乎与 OR (pv.fid = 13 AND pv.value = '') 结合使用......除非我忽略了某些东西
    • @Borgenk:为什么不是我的? ;-) 你有没有试过看看这个建议解释? ;-)
    【解决方案2】:

    不存在的地方(从 profile_values pv 中选择 1,其中 pv.uid = u.uid AND pv.fid = 13)

    这实际上是一个缓慢的解决方案,但我无法实现任何其他方式

    【讨论】:

      【解决方案3】:

      不妨试试

      AND (pv.fid != 13 OR pv.value IS NOT NULL)
      

      ?

      你的条件不太清楚:

      获取所有没有为 fid = 13 设置值或在 profile_values 中根本没有值的用户

      这意味着“让所有用户的 fid 等于 13 并且 profile_values 中有一些值”?

      【讨论】:

      • 这将选择 user2 - 12,因为 12 != 13 和 12 IS NOT NULL
      • 哦,抱歉,我看错了问题的部分。为什么 user2 出现两次?没有唯一 ID 本身就是一个问题,对吧?
      • 不,错了。有问题的第一个表是参数表。每个参数 1 行。所以如果用户有 N 个参数 - 他将在该表中有 N 行。在选择用户是否有 fid = 13 时,我们必须从查询结果中排除整个用户。
      【解决方案4】:

      您只需要值不是空白且fid 不是13 的配置文件,对吗?所以这意味着如果两者都为真,或者如果其中任何一个为真,则跳过这些记录。所以不要将它们组合在一起并使用 OR。使用和:

      WHERE 
      u.status != 0
      AND 
      pv.fid != 13 
      AND
      pv.fid IS NOT NULL 
      

      WHERE 
      u.status != 0
      AND 
      pv.fid IS NOT (13 OR NULL)
      

      【讨论】: