self join 和 inner join 在其他表上一起

self join with inner join on other tables together

我有一个包含 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 行符合其他表的条件吗? 我想要这样的输出: 对于 "groceries" 和 "bags" 作为 c.value

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

您可以像这样自行加入 records table 以及 categoriesrelational

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;

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

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"