2011-01-07 45 views
4

我想返回值,其中全球 = 或者可見 = 國家 = 佛羅里達但這不是返回所有其他值其中全球SQL WHERE語句不工作100%

select * from Table1 
where (visible = 'yes' and State = 'Florida') or Worldwide= 'yes' 
order by ID DESC 

編輯:我的壞人

對不起,這個聲明確實有用!我在我的陳述中選擇了TOP 8 *,這就是爲什麼它沒有返回所有記錄!當我拿到TOP 8的時候它就起作用了!我的錯!

+4

從Table1執行SELECT DISTINCT Worldwide以確保沒有其他值。 – StuartLC 2011-01-07 07:57:51

+1

您可能可以添加一些沒有抓取的樣本記錄,但您期望它們在輸出中。 – 2011-01-07 07:59:54

回答

1

試試這個:

where State = 'Florida' AND (visible = 'yes' or Worldwide= 'yes') 

涵蓋所有可能的情況下,與語法的其他變種:

where UPPER([State]) LIKE '%FLORIDA%' AND 
((UPPER(visible) LIKE '%YES%') OR (UPPER(Worldwide) LIKE '%YES%')) 
2

使用下面的腳本,查詢輸出的期望是什麼。

創建數據

DECLARE @Table1 TABLE (
    ID INTEGER IDENTITY(1, 1) 
    , State VARCHAR(32) 
    , Visible VARCHAR(32) 
    , WorldWide VARCHAR(32) 
) 

INSERT INTO @Table1 
SELECT 'Florida', 'Yes', 'Yes' 
UNION ALL SELECT 'Florida', 'Yes', 'No' 
UNION ALL SELECT 'Florida', 'No', 'Yes' 
UNION ALL SELECT 'Florida', 'No', 'No' 
UNION ALL SELECT 'Other State', 'Yes', 'Yes' 
UNION ALL SELECT 'Other State', 'Yes', 'No' 
UNION ALL SELECT 'Other State', 'No', 'Yes' 
UNION ALL SELECT 'Other State', 'No', 'No' 

選擇

SELECT * 
FROM @Table1 
WHERE (Visible = 'Yes' AND State = 'Florida') OR WorldWide = 'Yes' 

輸出

ID State   Visible WorldWide 
1 Florida   Yes Yes 
2 Florida   Yes No 
3 Florida   No  Yes 
5 Other State  Yes Yes 
7 Other State  No  Yes 
1

也許你有一些空那裏可能會導致你一些麻煩。

select * from Table1 
where (IsNull(visible,'') = 'yes' and IsNull(State,'') = 'Florida') 
or IsNull(Worldwide,'')= 'yes' 
order by ID DESC 

還檢查排序規則是否區分大小寫。整理可以在服務器,數據庫或列級別設置,所以你需要檢查以下內容:

Server排序

SELECT SERVERPROPERTY('COLLATION') 

數據庫歸類

SELECT DATABASEPROPERTYEX('DATABASENAME', 'Collation') SQLCollation; 

列排序規則

Select table_name, column_name, collation_name 
From information_schema.columns 
Where table_name = @table_name 
1

您最多有4個問題

  • 大小寫
  • 空間
  • 的NULL
  • 意外數據

變化,這可以被組合

--case 
(LOWER(visible) = 'yes' and LOWER(State) = 'Florida') or LOWER(Worldwide) = 'yes' 

--spaces 
(RTRIM(LTRIM(visible)) = 'yes' and RTRIM(LTRIM(State)) = 'Florida') or RTRIM(LTRIM(Worldwide)) = 'yes' 

--nulls 
(visible = 'yes' and State = 'Florida') or ISNULL(Worldwide, 'yes') = 'yes' 

--unexpected data: need samples