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

时间:2016-04-29 07:54:52

标签: php mysql

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

像这样的表

表-A

id subid userid
1  2     123
2  4     123

表-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

三江源

4 个答案:

答案 0 :(得分:0)

尝试使用此查询     从(b.no = a.no)上的连接b中选择a.no,b.title,其中a.userid ='345'

答案 1 :(得分:0)

您可以使用以下查询:

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

答案 2 :(得分:0)

您可以使用左连接并获取表格中不匹配的数据。我最近解决了这个问题。 Chk这个链接: 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(&#39; a&#39;,函数($ join)     {     $ join-&gt; on(&#39; a.subid&#39;,&#39; =&#39;,&#39; b.no&#39;);     })      - &GT;选择(&#39; b.no&#39;&#39; b.title&#39;)      - &GT; whereNull(&#39; a.userid&#39;)      - &gt;首先();或得到()

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

答案 3 :(得分:0)

  

这基本上会选择给定的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