在两个表

时间:2017-09-21 14:59:25

标签: sql linq sql-server-2012

我尝试了查询,但没有搜索答案,我有两张桌子

table 1

enter image description here

我希望在Linq中设计一个查询,它获取在表2中注册的所有数据,其中数字字段1和值3 AND值为4,在本例中我获取表1的数据

enter image description here

感谢您的合作

5 个答案:

答案 0 :(得分:1)

以下是我如何去做 - 我在SQL中编写它因为我比在LINQ上更好,但是从一个转换到另一个应该是直截了当的:

select 
    t1.id
    , t1.value
from table1 as t1
    inner join table2 as t21
        on t21.idTable1 = t1.id
        and t21.number = 1
    inner join table2 as t23
        on t23.idTable1 = t1.id
        and t23.number = 3
    inner join table2 as t24
        on t24.idTable1 = t1.id
        and t24.number = 4

这将连接到表2的一个子集三次,每次为您想要的值。使用“内连接”使逻辑等效于AND。

答案 1 :(得分:0)

使用子查询

从table_1中选择*,其中id为(从table_2中选择idtable1,其中数字为(1,3,4))

关节

select * from table_1 t1 join table_2 t2 on t1.id = t2.idtable1 where t2.number in(1,3,4)

答案 2 :(得分:0)

它将是

select id,idTable1,number 
       from 
       table2 
 where idTable1 = 1

如果我正确理解了这个问题。你的问题有点难以理解。如果那里应该加入

   select b.id,a.Idtable1,a.number
     from table1 b ,table2 a 
     where b.id = a.Idtable1

答案 3 :(得分:0)

如果我没有弄错你想要什么,这可能会奏效。您需要加入to表格,然后检查您想要使用的条件。

SELECT a.id, a.value
FROM TABLE1 a
INNER JOIN TABLE2 b on a.id=b.idTable1
WHERE b.number in (1,3,4)
AND a.id = 1;

答案 4 :(得分:0)

第一个查询假定table2.number对于给定的id是唯一的。那可能不是真的。如果是:

select table1.id, table1.value
from table1 
join table2 
  on table1.id = table2.idTable1
group by table1.id, table1.value
having count(*) = 3
where table2.number in (1,3,4)

如果'号码'可能是一个重复值(对于每个idTable1不是唯一的),那么我们需要确保我们在表2中加入不同的值:

select table1.id, table1.value
from table1 
join (select distinct table2.idTable1, table2.number where table2.number in (1,3,4)) t2 
  on table1.id = t2.idTable1
group by table1.id, table1.value
having count(*) = 3