【问题标题】:How get selected rows where user id is not in table record mysql如何获取用户ID不在表记录mysql中的选定行
【发布时间】:2016-04-29 07:54:51
【问题描述】:

如何获取用户 ID 不在表记录中的选定行

这样的表

table_a

id subid userid
1  2     123
2  4     123

table_b

id title
1  like
2  liked
3  bookmark
4  bookmarked

我使用连接表来获取结果 如果 WHERE userid=123 则得到结果

id title
2  liked
4  bookmarked

查询

select b.id,b.title from
table_a a
LEFT JOIN table_b b
ON b.id = a.subid
WHERE a.userid = '123'

但是,如果 userid = '345' 而不是在 table_a 中也得到结果呢?.. 结果必须是这样的(选定的行)

id title
1  like
3  bookmark

谢谢

【问题讨论】:

  • 提供您使用的查询
  • 真的不清楚你在问什么
  • 我怀疑你真的明白你在问什么?先澄清你的问题。
  • 如果您已经在使用 JOIN 函数,您可以使用 LEFT JOIN 来获取行但其中没有任何内容
  • 我也通过查询澄清了我的问题

标签: php mysql


【解决方案1】:

您可以使用以下查询:

SELECT id, title FROM t2 LEFT JOIN t1 ON t1.subid = t2.id 
WHERE (t1.userid = 345 AND NOT userid IS NULL) OR (
    NOT EXISTS(SELECT userid FROM t1 WHERE userid = 345) AND userid IS NULL
);

您可以在此处找到工作示例:http://sqlfiddle.com/#!9/c6a446/25

【讨论】:

  • 谢谢,但用户 id='345' 应该得到选定的行,我已经澄清了我的问题
【解决方案2】:

尝试使用此查询 select a.no, b.title from a join b on (b.no=a.no) where a.userid='345'

【讨论】:

    【解决方案3】:

    您可以使用左连接并获取不匹配的表的数据。我最近解决了这个问题。 查这个链接: Least Popular Event - Get list of events where bookings IS NULL OR LEAST

    在mysql中

    SELECT b.no,b.title FROM a LEFT JOIN b ON a.subid = b.no and where a.userid IS NULL;
    
    SELECT b.no,b.title FROM a LEFT JOIN b ON a.subid = b.no and where a.userid <> '345';
    

    在 laravel 中: $least = bmodel::leftJoin('a', function($join) { $join->on('a.subid', '=', 'b.no'); }) ->select('b.no','b.title') ->whereNull('a.userid') ->第一();或获取()

    您可以使用此查询获得一个或多个结果。它基本上将 userid 列与 no 列进行比较,并获取表 a 中没有匹配项的 no 和 title 列表。

    【讨论】:

      【解决方案4】:

      这基本上会使用给定的 userId 进行选择,或者如果不存在,则选择结果

       SELECT * FROM t2 LEFT JOIN t1 ON t1.subid = t2.id WHERE     t1.userid = 123|| 
       (select  userid from t1 where userid =123LIMIT 1) is  null
      

      这是第二种情况,您将获得不是 123 或任何数字的所有行

       SELECT * FROM t2 LEFT JOIN t1 ON t1.subid = t2.id WHERE     t1.userid = 345 || 
       (select  userid from t1 where userid =345 LIMIT 1) is  null
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多