我想:
SELECT someID FROM table1 WHERE someID IN (1,1,2,2,3)
返回
someID
1
1
2
2
3
虽然它现在只返回IN子句中的不同值,如下所示:
someID
1
2
3
我使用的是Microsoft SQL Server,我的表包含一个唯一的someID和PLSRec。
CREATE TABLE [dbo].[table1](
[someID] [int] IDENTITY(1,1) NOT NULL,
[PLSRec] [int] NOT NULL,
CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED
(
怎么样?:
DECLARE @table2 table(someID int)
INSERT INTO @table2(someID) VALUES (184),(132);
SELECT * FROM @table2 LEFT JOIN table1 ON @table2.someID=table1.someID
(INSERT INTO-sentence除了“'附近的语法不正确',')
答案 0 :(得分:2)
它只会根据IN()的值来检查行的someID。
IN()的外观并不重要,它不会返回比匹配该值的行更多的结果。
答案 1 :(得分:2)
这只能通过Cartesian product,a.k.a。JOIN
完成。在这种情况下,INNER JOIN
。您需要创建一个包含所有这些值的行集,如下所示:
SELECT 1 as someID
UNION ALL SELECT 1 as someID
UNION ALL SELECT 2 as someID
[...]
然后,在JOIN
子句中使用它(如果您使用的是MS SQL,则使用CTE)
SELECT table1.someID FROM table1
JOIN (SELECT 1 as someID
UNION ALL SELECT 1 as someID
UNION ALL SELECT 2 as someID
[...]
) as table2 on table1.someID=table2.someID
当然,这是一个非常难看的解决方案。
答案 2 :(得分:2)
我认为你误会了什么。
你的代码仅仅是语法糖SELECT someID
FROM table1
WHERE (
someID = 1
OR someID = 1
OR someID = 2
OR someID = 2
OR someID = 3
);
您的“IN子句”不是一个集合:如果您想要它,那么请使用表格,例如CTE,内联派生表,静态VIEW,表变量等。但请注意,集合没有重复的行!
答案 3 :(得分:-1)
我没试过,但是
SELECT someID, count(someID) FROM table1 WHERE someID IN (1,2,3) group by someID
可能符合您的目的。
或者
SELECT someID id1, someID id2 FROM table1 WHERE id1 IN (1,2,3)
可能有效
编辑:哪个数据库?我正在使用Sybase SQLAnywhere,它确实返回多行。