如何編寫sql查詢以從其where列中的列根據發送內容具有不同值的表中選擇行。 示例:發送的參數對於單個列名稱具有3個不同的值。 我如何檢索滿足所有參數的行。用於選擇具有不同值的單行的行的查詢
-1
A
回答
0
您可以使用IN/NOT IN構造...
要匹配所有具有參數中的列值的列:
SELECT * FROM table WHERE `columnName` IN ('parameter1','parameter2','parameter3');
匹配所有不具有的列其列值在參數之中:
SELECT * FROM table WHERE `columnName` NOT IN ('parameter1','parameter2','parameter3');
+0
我必須匹配40個不同的值。 – ExTincT
0
我認爲你有一個巨大而不確定數量的潛在值。
在這種情況下,從而創造自己的函數:
CREATE FUNCTION [dbo].[fnSplit](
@sInputList VARCHAR(max) -- List of delimited items
, @sDelimiter VARCHAR(5) -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(max))
BEGIN
DECLARE @sItem VARCHAR(max)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
BEGIN
SELECT
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
@sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
現在,您將能夠寫的線沿線的查詢:
SELECT * FROM myTable WHERE myColumn IN
(SELECT * FROM dbo.fnSplit(stringParamHere, stringSeparatorHere))
通過這種方式,你可以通過查詢使用給定分隔符的單個參數中的x值列表。
以上示例用於分隔字符串值。然而很容易產生一個返回整數的表格,只需通過改變表項的類型和改變線路fnSplitInt「INSERT INTO ...」到:
INSERT INTO @List SELECT CAST(@sItem as int)
PostgreSQL的功能相同樣子:
CREATE OR REPLACE FUNCTION public.fnsplit(
IN stringlist character varying,
IN delimit character varying)
RETURNS TABLE(items character varying) AS
$BODY$
declare remainderlist character varying;
declare front character varying;
declare delimitpos integer;
begin
drop table if exists tmptbl;
create temp table tmptbl(items character varying);
remainderlist := $1;
delimitpos := strpos(remainderlist, $2);
while delimitpos > 0 loop
front := trim(both from(left(remainderlist, delimitpos -1)));
remainderlist := substr(remainderlist, delimitpos + 1);
if length(front) > 0 then
insert into tmptbl values (front);
end if;
delimitpos := strpos(remainderlist, $2);
end loop;
--insert last value
remainderlist := trim(both from remainderlist);
if length(remainderlist) > 0 then
insert into tmptbl values (remainderlist);
end if;
return query
select * from tmptbl;
return;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
HTH
0
試試這個搭配大量值
SELECT * FROM table WHERE columnName IN (select
unnest(regexp_split_to_array(comma_separated_values::text, ',')));
或者你可以寫一個Function
也comma_separated_values
作爲輸入參數,像
CREATE OR REPLACE FUNCTION myFunction(comma_separated_values Text)
RETURNS refcursor AS
$BODY$
DECLARE
cur_data refcursor;
begin
open cur_data for
SELECT * FROM table WHERE columnName IN (select
unnest(regexp_split_to_array(comma_separated_values::text, ',')));
return cur_data ;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
編輯:您可以創建另一個函數以
text array
爲input
參數
CREATE OR REPLACE FUNCTION myFunction(values Text[])
RETURNS refcursor AS
$BODY$
DECLARE
cur_data refcursor;
begin
open cur_data for
SELECT * FROM table WHERE columnName IN (select unnest(values));
return cur_data ;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
希望它可以幫助。
+0
我讓它在java中工作,用於選擇滿足我的參數並將其附加到列表的行 – ExTincT
相關問題
- 1. 用於選擇具有最小值的不同行的SQL查詢
- 2. 選擇具有不同值的行
- 3. 選擇行具有不同值的列
- 4. 選擇具有行相同值的行
- 5. 從不同行中選擇具有相同編號的值的SQL查詢
- 6. 查詢選擇基於列的不同值的行
- 7. 選擇具有相同列值的行
- 8. 在不同列上選擇具有不同值的行
- 9. MySQL從另一列中選擇具有不同值的查詢:SUM()行
- 10. MySQL選擇具有最小值的所有子查詢行
- 11. 選擇具有給定值的行的百分比查詢?
- 12. 用於選擇具有相同列值的那兩列值的mysql查詢
- 13. 選擇具有特定值的行之後的所有行而不重複相同的子查詢
- 14. 用於選擇具有相同列的兩個不同表的查詢
- 15. 在同一字段中選擇具有不同值的行
- 16. 選擇MySQL查詢不同sumof具有
- 17. 用於排除具有相似值但不相同的行的SQL查詢
- 18. 選擇具有相同的ID行,並選擇剩餘行不相同的ID
- 19. 選擇具有不同值的行的百分比
- 20. 查詢不選擇不同的值
- 21. 從子查詢中選擇具有最大值的行,不使用LIMIT
- 22. MySQL查詢選擇具有相同值的所有字段
- 23. 在mysql中選擇具有相同id但具有不同列值的行
- 24. MySQL查詢選擇基於前N行值的行
- 25. 選擇最小列值並僅查詢不同的相應行
- 26. 如何從多行選擇查詢中獲取不同的值?
- 27. 如何在單個查詢中選擇具有多個特定列值的行?
- 28. SQL選擇查詢 - 從不同的字段中進行選擇
- 29. SQL查詢查找具有相同訂單行的訂單
- 30. 選擇具有多個不同列值組合的行
從TableA中選擇*其中Column1 IN(1,2,3)? – Veljko89
添加樣品表數據和預期結果! – jarlh
@ Veljko89參數(值)的數量每次都會改變。基於從複選框中選擇的內容。 – ExTincT