在撰写本文时我还在尝试学习SQL,所以我现在有点不稳定。
我的情况是这样的:
看起来它应该很简单,但我想我现在只是缺乏想象力。在我的路上会有更多这类问题,所以看一个解决这个问题的例子对那些人也有帮助。
答案 0 :(得分:0)
试试这个:
Select TaskId, LocationName from Task, Location where
Task.TaskId = Location.TaskId and
LocationName in (<all the locations you want to query against>)
您可以发送以逗号分隔的位置列表,并在此查询中使用。如果要使查询可伸缩,则可以创建返回有效/已过滤列表的小SP,而其他SP可以将它们用作输入。你也可以处理这是在编码方面(而不是sql)。
答案 1 :(得分:0)
我从您的描述中获得了什么
declare @tasks table
(
taskid int,
taskname varchar(20)
)
declare @locations table
(
locationid int,
taskid int,
locationname varchar(20)
)
insert into @tasks select 1, 'task1'
insert into @tasks select 2, 'task2'
insert into @tasks select 3, 'task3'
insert into @locations select 1, 1, 'location1'
insert into @locations select 2, 1, 'location2'
insert into @locations select 3, 1, 'location3'
insert into @locations select 4, 2, 'location4'
insert into @locations select 5, 2, 'location5'
insert into @locations select 6, 3, 'location6'
select t.taskid, t.taskname, l.locationid, l.locationname
from @tasks t inner join @locations l on t.taskid = l.taskid
where l.locationname in ('location1', 'location4') -- OR locationid
-- You can alos do this like
select t.taskid, t.taskname, l.locationid, l.locationname
from @tasks t inner join @locations l on t.taskid = l.taskid
where l.locationname in (select top 2 locationname from @locations order by locationid desc)
答案 2 :(得分:0)
SELECT *
FROM Tasks
WHERE ID IN
(
SELECT l.ID
FROM Location l
WHERE l.Loc_name IN ('loc1','loc2','loc3')
GROUP BY l.ID
HAVING COUNT(l.Loc_name) = 3 -- Number of all location u have in the in clause
);
你要做的就是设置有克劳斯的号码。
只有在任务没有两次或更多相同的位置时才会有效。
你甚至可以为每个位置做一个Exists子句,但只有它的静态