2011-01-07 64 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