我正在尝试从表格中获取数据(颜色)' X'对于模型和年龄组合。
model yr color
a 2007 yellow,black
b 2008 yellow,orange,pink
因此对于(a,2007)
,它应该返回" yellow,black
"
SELECT * from X where model in (a,b) and yr in (2007,2008)
=>返回所有组合
我试过SELECT * from X where (model,yr) in (VALUES(a,2007),(b,2008))
=>查询未执行。语法错误。
我该怎么办?
答案 0 :(得分:1)
以下内容应返回所需的结果。你是否在字符串常量周围使用了引号?
select color from foo where (model,yr) in (values ('a',2007),('b',2008))
答案 1 :(得分:0)
根据DB2(LUW,ZOS,AS400)的变体,您可能必须使用VALUES
或SYSDUMMY1
表。
DB2 zOS的解决方案如下:
SELECT * FROM x WHERE (model,yr) IN
(SELECT a,2007 FROM SYSIBM.SYSDUMMY1
UNION
SELECT b,2008 FROM SYSIBM.SYSDUMMY1)
如果您希望传递一组model,year
元组参数,可以使用XMLTABLE
函数将XML参数解析为合成表。
SELECT * FROM x WHERE (model,yr) IN
(select "model","year" from
param,xmltable(
'$Q/q/r' PASSING ? AS "Q"
columns
"model" varchar(30) path '@model',
"year" integer path '@year'
) AS "Q"
)
查询的格式为
<q>
<r model="a" year="2007" />
<r model="b" year="2008" />
</q>
&#13;
答案 2 :(得分:0)
其他解决方案:
select *
from foo t1
inner join table (values ('a',2007),('b',2008)) t2(Key1, key2)
on (t1.model, t1.yr)=(t2.Key1, t2.Key2)