带有伪行的SQL in子句
我真的很想知道是否有可能做一个select语句,它返回与我们放入子句中的完全相同的记录 样本:带有伪行的SQL in子句,sql,in-clause,dummy-data,Sql,In Clause,Dummy Data,我真的很想知道是否有可能做一个select语句,它返回与我们放入子句中的完全相同的记录 样本: select * from table where table_id in (1, 2, 3, 666); 例如,此表只有1到100之间的id-s,因此此选择仅返回三行。我需要做什么,为666获得一行(可能是空的或伪的) 谢谢 假设一个表numbers包含从(比如)1到1000000的所有数字(事实上足以覆盖您的输入值范围),您可以运行以下SQL: SELECT * FROM numbers l
select * from table
where table_id in (1, 2, 3, 666);
例如,此表只有1到100之间的id-s,因此此选择仅返回三行。我需要做什么,为666获得一行(可能是空的或伪的)
谢谢 假设一个表
numbers
包含从(比如)1到1000000的所有数字(事实上足以覆盖您的输入值范围),您可以运行以下SQL:
SELECT *
FROM numbers left outer join table on table.table_id = numbers.number
WHERE numbers.number in (1, 2, 3, 666)
如果您使用提供更好解决方案的DBMS,例如e。GSQL Anywhere使用它的过程,您可以用过程调用替换表
数字
,并且没有最大数字的限制。假设一个表数字
包含从1到1000000的所有数字(实际上足以覆盖您的输入值范围),您可以运行以下SQL:
SELECT *
FROM numbers left outer join table on table.table_id = numbers.number
WHERE numbers.number in (1, 2, 3, 666)
如果您使用提供更好解决方案的DBMS,例如e。G使用SQL Anywhere及其过程,您可以用过程调用替换表
编号,并且没有最大编号的限制。您可以在没有表的情况下进行选择
只需对您的查询进行联合
select table_id, some_column from table
where table_id in (1, 2, 3, 666);
union
select 666, 'dummy_data'
您可以在没有表格的情况下进行选择
只需对您的查询进行联合
select table_id, some_column from table
where table_id in (1, 2, 3, 666);
union
select 666, 'dummy_data'
一种考虑方法是:您需要将该数据作为数据集“输入”查询。where子句中找到的数据从未“添加”到查询中,它们仅用于过滤现有数据
一个简单的例子:
DECLARE @MustInclude (Value int not null)
INSERT @MustInclude (Value) values (1)
INSERT @MustInclude (Value) values (2)
INSERT @MustInclude (Value) values (3)
INSERT @MustInclude (Value) values (666)
SELECT *
from @MustInclude mi
left outer join MyTable mt
on mt.Value = mi.Value
一种考虑方法是:您需要将该数据作为数据集“输入”查询。where子句中找到的数据从未“添加”到查询中,它们仅用于过滤现有数据
一个简单的例子:
DECLARE @MustInclude (Value int not null)
INSERT @MustInclude (Value) values (1)
INSERT @MustInclude (Value) values (2)
INSERT @MustInclude (Value) values (3)
INSERT @MustInclude (Value) values (666)
SELECT *
from @MustInclude mi
left outer join MyTable mt
on mt.Value = mi.Value
您可以使用union:
select * from table
where table_id in (1, 2, 3);
union
select 666 as table_id, other_fields_with_dummy_values_in_table from dual;
这就是你如何在甲骨文中做到这一点。根据您使用的数据库系统的不同,dual的可能会有所不同
请注意,如果使用union,虚拟查询必须选择与实际查询相同的记录。可以使用union:
select * from table
where table_id in (1, 2, 3);
union
select 666 as table_id, other_fields_with_dummy_values_in_table from dual;
这就是你如何在甲骨文中做到这一点。根据您使用的数据库系统的不同,dual的可能会有所不同
请注意,如果使用union,虚拟查询必须选择与实际查询相同的记录。子句中的是一个布尔谓词,因此需要用虚拟记录集替换它:
SELECT m.*
FROM (
SELECT 1 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 3 AS id
UNION ALL
SELECT 666 AS id
) q
LEFT JOIN
mytable m
ON m.id = q.id
在SQL Server 2008中,您可以运行以下查询:
SELECT *
FROM @mydata d
LEFT JOIN
mytable t
ON t.id = d.id
SELECT *
FROM (
SELECT :arr[s] AS id
FROM generate_series(1, array_upper(:arr, 1)) s
) q
LEFT JOIN
mytable t
ON t.id = q.id
with@mydate
是一个表变量,作为参数从客户端传递
在PostgreSQL
中,您可以运行以下查询:
SELECT *
FROM @mydata d
LEFT JOIN
mytable t
ON t.id = d.id
SELECT *
FROM (
SELECT :arr[s] AS id
FROM generate_series(1, array_upper(:arr, 1)) s
) q
LEFT JOIN
mytable t
ON t.id = q.id
其中:arr
是一个数组[1,2,3,666]
,也是作为参数从客户端传递过来的
在Oracle中,您可以执行以下操作:
SELECT *
FROM TABLE(:mycol) q
LEFT JOIN
mytable t
ON t.id = q.id
,其中:mycl
是一个集合类型的变量,从客户端传递。
子句中的是一个布尔谓词,因此需要将其替换为一个伪记录集:
SELECT m.*
FROM (
SELECT 1 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 3 AS id
UNION ALL
SELECT 666 AS id
) q
LEFT JOIN
mytable m
ON m.id = q.id
在SQL Server 2008中,您可以运行以下查询:
SELECT *
FROM @mydata d
LEFT JOIN
mytable t
ON t.id = d.id
SELECT *
FROM (
SELECT :arr[s] AS id
FROM generate_series(1, array_upper(:arr, 1)) s
) q
LEFT JOIN
mytable t
ON t.id = q.id
with@mydate
是一个表变量,作为参数从客户端传递
在PostgreSQL
中,您可以运行以下查询:
SELECT *
FROM @mydata d
LEFT JOIN
mytable t
ON t.id = d.id
SELECT *
FROM (
SELECT :arr[s] AS id
FROM generate_series(1, array_upper(:arr, 1)) s
) q
LEFT JOIN
mytable t
ON t.id = q.id
其中:arr
是一个数组[1,2,3,666]
,也是作为参数从客户端传递过来的
在Oracle中,您可以执行以下操作:
SELECT *
FROM TABLE(:mycol) q
LEFT JOIN
mytable t
ON t.id = q.id
,其中:mycol
是一个从客户端传递的集合类型变量。这将一直有效,直到他需要一个不在numbers.number
中的伪值为止。是的,这是一个限制-至少对许多DBMS来说是这样,但是e。GSQLAnywhere提供了一个带有系统过程的解决方案。我把它添加到我的答案中。直到他需要一个不在numbers.number
中的虚拟值时,这才起作用。是的,这是一个限制-至少对许多DBMS来说是这样,但e。GSQLAnywhere提供了一个带有系统过程的解决方案。我把它添加到我的答案中。你的解决方案要求你在定义语句时知道哪些值在表中,哪些不在表中。@Frank:如果你想以编程方式设置虚拟列表,你可以使用动态SQL来构建它,但是OP谈论它的方式,在我看来,他们似乎已经知道了什么是需要提前成为假人的。但是,是的,我想这可能需要一些澄清。你的解决方案要求你在定义语句时知道哪些值在表中,哪些不在表中。@Frank:如果你想以编程方式设置虚拟列表,你可以使用动态SQL来构建它,但是OP谈论它的方式,在我看来,他们似乎已经知道了什么是需要提前成为假人的。但我想这需要澄清一下。