存在的SQL,同时保留它们之间的值

时间:2015-02-06 22:42:26

标签: mysql sql

好吧,我有2张这样的桌子:

    表1

ID | USER_ID  
1    0      
2    2       
3    15      
4    16      

表2

ID | FROM | TO 
9    0      2 
9    2      16 
9    16     15 
9    15     0 
10   15     2 

我想要的是非常简单,但让我发疯,考虑到IDFROMTO代表表2中的用户。我希望找到FROM中的某个人(表1中为Table1.user_id),表2中的IDexists TO({1}}(与Table1.user_id相同),表2的ID相同

例如,记录16符合条件。因为它显示在From中,ID为9,而TO与表2中的ID相同(TO和FROM对应于table1中的user_id为15)

我所做的是:

select * 
from `Table1` 
where exists (select ID from `Table2` as p1 where FROM = 16) 
      and exists (select ID from `Table2` as p2 where ID = 16) 
      and p1.ID = p2.ID

4 个答案:

答案 0 :(得分:1)

您可以尝试使用self join查找具有相同ID的记录,然后比较这些值。

select a.from from table1 a inner table1 b on a.id = b.id
where a.from = b.to

答案 1 :(得分:0)

这可能有用;

select * from table1 a where a.USER_ID in 
(select b.FROM from table2 b
where exists (select c.id from table2 c
where b.id = c.id and b.FROM = c.TO) )

答案 2 :(得分:0)

这是你想要的吗?

select *
from table1 t
where exists (select 1 from table2 t2 where t2.`from` = t.id) and
      exists (select 1 from table2 t3 where t3.`to` = t.id);

答案 3 :(得分:0)

我不确定如果理解正确的话。

如果User_ID中的Table_1应该出现在表格FromTo列中,并且对于这些记录,Table_2中的ID也必须相同,

然后,对于那些条件,不仅符合您在示例中提到的User_ID 16和15,而且还符合0和2的条件。

假设这是正确的。

然后尝试这段代码(对于mySQL,您可能需要更改一些语法):

SELECT A.*  
FROM Table_1 AS A
INNER JOIN Table_2 AS B ON (A.USER_ID=B.FROM)
INNER JOIN Table_2 AS C ON (A.USER_ID=C.TO AND C.ID = B.ID)