2011-10-13 52 views
0

我试图从三个表中获取ID的列表。获取多列限定符,INNER JOIN和UNION以一起工作

table_one 
--------- 
| id | other_data | 

table_two 
--------- 
| this_id | user_id | time_qual | 

table_three 
--------- 
| this_id | second_qual | 

我想有以下资格得到一个列表的table_oneid S:

  1. id也在table_threethis_id
  2. second_qual发现table_three等于1
  3. this_id in table_two等于table_oneid和在同一行中,table_twouser_id等于PHP变量$user_id AND time_qual该行中等于1
  4. 而且包括id s表示符合#1和#2,和不#3如果table_oneid和PHP变量$user_id未在同一行发现的table_two

这是我的尝试:

 SELECT tb1.id FROM table_one tb1 
      INNER JOIN table_two tb2 
      INNER JOIN table_three tb3 
      WHERE tb2.this_id = tb1.id 
      AND tb3.this_id = tb1.id 
      AND tb3.second_qual = 1 
      AND ((tb2.user_id = $user_id AND tb2.time_qual = 1) 
       OR ($user_id NOT IN (SELECT user_id FROM table_two))) 
      GROUP BY tb1.id 

我猜这里面应该有一个UNION,而tb2.this_id = tb1.id消除了我想从#4中得到的结果,但我不知道该怎么做。

在此先感谢!

回答

1

为了能够解析您的需求,我认为这是答案。让我知道如果它错过了,我可以修改:

SELECT t1.id 
FROM table_three t3 
RIGHT JOIN table_one t1 
    ON t1.id=t3.this_id 
LEFT JOIN table_two t2 
    ON t1.id=t2.this_id 
WHERE (t3.this_id IS NOT NULL AND t3.second_qual=1) 
    AND ((t2.this_id IS NOT NULL AND t2.user_id=1 AND t2.time_qual=1) 
    OR t2.this_id IS NULL); 
+0

谢谢你的所有帮助。这个概念很难解析。我不得不添加第二个'OR'('OR($ user_id NOT IN(SELECT user_id FROM t2.user_id)))''再一次,谢谢! – Kyle