【发布时间】:2016-07-10 10:29:52
【问题描述】:
我有一个表来描述数据库中其他表之间的关系。每个用户都可以拥有任何文件,每个文件都可以拥有任何用户。
如果我得到一个文件的关系并且我没有这个文件与用户的关系,但用户与那个文件有关系。我想看看。
当两者都与自己有关系时,我不想看到两次记录。
作为输入,我有记录类型和记录 ID。如何实现?
闭表:
+--------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| record_id | int(11) | NO | | NULL | |
| record_type | varchar(200) | NO | | NULL | |
| second_record_id | int(11) | NO | | NULL | |
| second_record_type | varchar(200) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+----------------+
样本数据:
+----+-----------+-------------+------------------+--------------------+
| id | record_id | record_type | second_record_id | second_record_type |
+----+-----------+-------------+------------------+--------------------+
| 1 | 1 | files | 1 | users |
| 2 | 2 | users | 1 | files |
| 3 | 3 | users | 1 | files |
| 4 | 2 | files | 1 | users |
| 5 | 1 | users | 1 | files |
| 6 | 1 | files | 3 | users |
+----+-----------+-------------+------------------+--------------------+
我试过了
SELECT * FROM closure
WHERE record_id=1 OR second_record_id = 1
AND record_type="files" OR second_record_type="files"
GROUP BY "files"
HAVING record_id=1 OR second_record_id=1
但它让我有了一个关系:
+----+-----------+-------------+------------------+--------------------+
| id | record_id | record_type | second_record_id | second_record_type |
+----+-----------+-------------+------------------+--------------------+
| 1 | 1 | files | 1 | users |
+----+-----------+-------------+------------------+--------------------+
我想要的结果是:
+----+-----------+-------------+------------------+--------------------+
| id | record_id | record_type | second_record_id | second_record_type |
+----+-----------+-------------+------------------+--------------------+
| 1 | 1 | files | 1 | users |
| 2 | 2 | users | 1 | files |
| 6 | 1 | files | 3 | users |
+----+-----------+-------------+------------------+--------------------+
编辑
我终于删除了 id 列。
【问题讨论】:
-
我看不到想要的结果
-
我只是把我现在研究的东西放了,可能信息太多,要不要删除“研究部分”?
-
您应该根据提供的样本添加您想要获得的结果
-
这个问题写的很烂,我看到的多对多和Junction Table创建两张表。
-
我知道,但有时很难解释自己的问题。这些名字肯定很差,当我看到它们时——我不知道第一眼看到的是什么。我已经阅读了你的答案。谢谢。
标签: mysql sql junction-table