我有两张桌子(|------------------------|
| id | name |
| 1 | group1 |
| 2 | test group |
|------------------------|
和|---------------------------------|
| id | user | thread |
|---------------------------------|
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 1 | 2 |
| 4 | 2 | 2 |
| 5 | 3 | 2 |
|---------------------------------|
)。本质上,线程是具有名称的对象,然后user_thread将用户链接到线程。这是为了说明多对多的关系。
鉴于此设置,我试图找出如何在两个用户之间获取线程。
线程看起来像这样
$querystring = '
PREFIX : <http://www.semanticweb.org/user/ontologies/2016/karya_ilmiah#>
SELECT ?judulNaskah ?linkNaskah
WHERE { ?naskah :judulNaskah ?judulNaskah. filter regex(str(?judulNaskah),"Sistem Informasi Manajemen").
?naskah :linkNaskah ?linkNaskah} ORDER BY ?judulNaskah';
$result=$model->sparqlQuery($querystring,"HTML");
echo $result;
user_threads看起来像这样
function checkCheckbox(){
$('#numOfTrans').hide();
$('#daysOfInactivity').hide();
$("#targetPointDiv").hide();
$("#targetTransactionDiv").hide();
$("#fixedTimeDiv").hide();
$("#isNumOfTrans").hide();
if ($('#irregular').is(":checked")) {
$('#daysOfInactivity').show();
} else {
$("#targetPointDiv").show();
$("#targetTransactionDiv").show();
$("#fixedTimeDiv").show();
$("#isNumOfTrans").show();
}
if ($('#isNumOfTrans').is(":checked")) {
$('#numOfTrans').show();
}
}
所以我遇到的问题是这个 - 给定用户1和用户2,我想返回它们独有的共同线程。
使用1和2查询应返回线程1.我尝试使用自联接和混合排除,但SQL不在我的主要技能组中。有没有办法做到这一点,还是我需要重组我的桌子?
答案 0 :(得分:1)
一种方法是选择让两个用户都使用JOIN的线程,然后排除其中包含其他用户的所有线程。
SELECT ut1.thread FROM user_threads ut1
JOIN user_threads ut2 ON ut1.thread=ut2.thread
WHERE ut1."user" = 1 AND ut2."user" = 2
AND NOT EXISTS
(SELECT 1 FROM user_threads WHERE thread=ut1.thread AND "user" NOT IN (ut1."user", ut2."user"))