2017-05-30 47 views
-1

我有一个数据库与3表记录,类别,关系。自我加入与其他表上的内部联接

records (id, lat, lng) 
categories (c_id, c_value) 
relational (r_id, c_id) 

records 
id | lat  | lng 
---------------------- 
1 23.57258 -35.28412 
2 23.54855 -35.18881 
3 23.74128 -35.17469 

categories 
c_id | c_value 
--------------- 
100 groceries 
101 bags 
102 drinks 

relational 
id | c_id 
------------ 
1  100 
1  102 
2  101 
3  100 

的relational.r_id = records.id和relational.c_id = categories.c_id 我想从不同c_value记录采取对,所以我想做个自我记录中加入并在内部联接类别和关系。 我做了这个没有自我的记录

SELECT id, lat, lng, c_value 
FROM records 
JOIN relational 
    ON records.id = relational.id 
JOIN categories 
    ON relational.c_id = categories.c_id 
WHERE c_value = "V1" 

加入我想是这样的,但没有奏效。我对R1.c_value有问题。

SELECT R1._id, R1.lat, R1.lng, R1.c_value, R2._id, R2.lat, R2.lng, 
     R2.c_value 
FROM records R1, records R2 
JOIN relational 
    ON records.id = relational.id 
JOIN categories 
    ON relational.c_id = categories.c_id 
WHERE R1.c_value = "groceries" AND R2.c_value = "bags" 

你知道我该如何结合这3个连接以从记录中取出2行与其他表的标准? 我希望有一个这样的输出: 对于“杂货”和“袋”为c.value

1 | 23.57258 | -35.28412 | groceries | 2 | 23.54855 | -35.18881 | bags  
+1

在相同的查询中混合使用“逗号连接”和“连接”语法通常是一个糟糕的想法....使用“逗号连接”符号通常是一个糟糕的主意。 – Uueerdo

+0

我觉得这个问题很难理解。你能否提供一些样本数据和你试图获得的结果? – Mureinik

回答

0

我终于找到了我想要的东西。我的查询应该是这样的。无论如何,感谢您的帮助和想法。

SELECT r1.id, r1.lat, r1.lng, c1.c_value, r2.id, r2.lat, r2.lng, c2.c_value 
FROM records r1 JOIN relational rl1 ON rl1.id = r1.id 
JOIN categories c1 ON rl1.c_id = c1.c_id 
JOIN records r2 JOIN relational rl2 ON rl2.id = r2.id 
JOIN categories c2 ON rl2.c_id = c2.c_id 
WHERE c1.c_value = "groceries" AND c2.c_value = "bags"  
0

您可以自行加入recordscategoriesrelational这样一起:

SELECT r1.id, r1.lat, r1.lng, r2.id, r2.lat, r2.lng, c.c_value 
FROM records r1 JOIN relational rl ON r1.id = rl.r_id 
JOIN records r2 ON r2.id = rl.r_id 
JOIN categories c ON rl.c_id = c.c_id 
WHERE r1.id <> r2.id; 
+0

这对于1 c_value来说看起来不错。如果我希望c_value在r1中有所不同,并且在r2中有所不同,您能否帮助我进行查询? – arek

+0

在这种情况下,您需要在'categories'表上加入两次,并提供不同的值。 –

+0

你的意思是把c1.c_value,c2.c_value放入select,然后在rl.c_id = c1.c_id上加入类别c1,并在rl.c_id = c2.c_id上加入类别c2,其中c1.c_value =“V1”AND c2。 c_value =“V2”。我试过这个,但它返回空结果。 :/ – arek