2012-02-08 76 views
3

我想从一个查询中的两个相关表中获取数据。 表是这样的:如何从两个相关表中获取数据?

表1:

-------------------------- 
| ID  | username | 
-------------------------- 
| 1   | user1  | 
| 2   | user2  | 
| 3   | user3  | 
| 4   | user4  | 
-------------------------- 

表2:

---------------------------------------------------- 
| ID  | user_id | key  | value  | 
---------------------------------------------------- 
| 1   | 1   | key1  | value1  | 
| 2   | 1   | key2  | value2  | 
| 3   | 2   | key2  | value3  | 
| 4   | 3   | key3  | value4  | 
| 5   | 4   | key1  | value5  | 
| 6   | 4   | key3  | value5  | 
---------------------------------------------------- 

我想包括从表1和键值对从表2中的所有行的结果key = key1。如果表1中表1中给定行的键不存在,则用NULL填充它。预期的结果例子:

---------------------------------------------------- 
| user_id | username | key  | value  | 
---------------------------------------------------- 
| 1   | user1  | key1  | value1  | 
| 2   | user2  | NULL  | NULL  | 
| 3   | user3  | NULL  | NULL  | 
| 4   | user4  | key1  | value5  | 
---------------------------------------------------- 

备选地 - 所有从表1不包含键 - 值对键KEY1 =表2

我从2个表和从SELECT试图标准SELECT行表1与表2中的JOIN,但我得到的是表1中的所有行,其中包含表2中的key = key1的键值对,这与我想要的完全相反。

有什么建议吗?

回答

8
select 
     t1.id, 
     t1.username, 
     t2.key, 
     t2.value 
    from 
     table1 t1 
     left join table2 t2 
      on t1.id = t2.user_id 
      and t2.key = 'key1' 

为了您的 “另类” 来获取所有没有,只需添加一个where子句..

where t2.user_id IS NULL 
1

试试这个:

SELECT t1.username,t2.user_id,t2.key,t2.value FROM table1 as t1 left join table2 as t2 on(t1.id = t2.user_id) and t2.key = 'key' 
-1

查询可能是这个样子:

SELECT t1.username, t2.key, t2.value FROM table1 AS t1 
LEFT OUTER JOIN table2 AS t2 ON t1.id = t2.user_id; 

例如,如果有n Øuser_id说明表2中3,然后查询(上图)将产生:

+----------+------+--------+ 
| username | key | value | 
+----------+------+--------+ 
| user1 | key1 | value1 | 
| user1 | key2 | value2 | 
| user2 | key2 | value3 | 
| user3 | NULL | NULL | 
| user4 | key1 | value5 | 
| user4 | key3 | value5 | 
+----------+------+--------+ 
+0

,他一直在寻找只允许某个键=“键1”的样本,以及或者如何获得倒数(只有那些没“T)。你有没有看到我的回答... – DRapp 2012-02-08 22:52:17

+0

哦,我明白了。谢谢。 – 2012-02-08 23:07:55

相关问题