簡體   English   中英

SQL Server:非嚴格WHERE查詢

[英]SQL Server : non-strict WHERE query

我想在一個表上執行Select查詢,如果至少所有必需的“ X”選項都經過了驗證,即使最后還有更多選項,該查詢也會返回列的值。

NAME |  A  |  B  |  C  |  D   |  E  |
------------------------------------
BOB           X     X     X   
TOM     X     X     X 
WILL                X     X      X

例如:BOB必須至少具有選項B,C和D才有效。 我想要的是無論E或A的值是多少(至少有True),如果B,C和D至少為true,則有一個查詢返回BOB。 B = true,C = true,D = true和A = true的查詢也應返回BOB。

這樣的查詢

Select 
    Name
From 
    Table
Where 
    A = True and B = True and C = True and D = True

返回BOB(因為B,C和D為true)和TOM(因為A,B和C為True),但不會,因為它需要E = true。

你有想法嗎?

謝謝

因此,基本上,您需要評估三個不同的條件,並且如果其中任何一個為真,則選擇名稱。

這是提供的查詢(更改表名和where子句中的“ True”)

Select 
    Name
From 
    Table
Where 
    (B = True and C = True and D = True)
    or (A = True and B = True and C = True)
    or (C = True and D = True and E = True)

感謝您的意見! 是的,達米安,我認為關系部門可能會有所幫助。 也許我可以更改2個表的結構:

1個表,列出了每個用戶有效所需的選項:t_name

Name | Opt1 | opt2 | opt3 | opt4|
================================
BOB  |  B   |  C   |  D   |     |
---------------------------------
TOM  |  A   |  B   |  C   |     |
---------------------------------
WILL |  C   |  D   |  E   |     |
---------------------------------

可以通過True或False更新一個表,具體取決於是否以參數形式發送了Option,如果發送了Option,則其值為true(因此,每個請求都必須更新此表以列出可用的選項)

t_option

Option | Status| 
================
 A     | True  |
----------------
 B     |  True |
----------------
 C     |  True |
----------------
 D     |  True |
----------------
 E     |  false|
----------------

因此查詢可以是這樣的:

SELECT name FROM t_name 
WHERE opt1 IN (SELECT option FROM t_option WHERE status=True)
AND opt2 IN (SELECT option FROM t_option WHERE status=True)
AND opt3 IN (SELECT option FROM t_option WHERE status=True)
AND opt4 IN (SELECT option FROM t_option WHERE status=True)

但我必須確保opt不為空(在示例中opt4為null)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM