标签: where

基于参数构建 where 子句

在 PostgreSQL 中,我试图在一个函数中构建一个 where 子句,该函数使用入站参数来确定 IN 的内容

例如:

select fld1, count(fld1)
from xyz
where fld1 in (
    case $1
        when 1 then 'Value1'
        when 2 then 'Value2'
        when 3 then '''Value1'',''Value2'''
        when 4 then '''Value4'',''Value5'',''Value6'''
    else NULL
)
group by fld1
Run Code Online (Sandbox Code Playgroud)

值 1 和值 2 一样正常工作,值 3 和 4 在语法上没有失败,但没有返回任何行。

postgresql case where

3
推荐指数
1
解决办法
1538
查看次数

MySQL 在 ORDER BY 之前运行 WHERE 子句吗?

我有这个查询:

SELECT my_code 
FROM ranges 
WHERE 123456789 BETWEEN first_number AND last_number 
ORDER BY type_of_code ASC LIMIT 1 ;
Run Code Online (Sandbox Code Playgroud)

我的问题是,它会在ORDER BYWHERE子句中选择行之后运行吗?

KEYfirst_numberlast_number。我的桌子大约有 500 万行。我不想ORDER BY先。

mysql optimization order-by where

3
推荐指数
1
解决办法
3593
查看次数

如何在 WHERE 子句中使用 CASE 语句的结果?

当我尝试运行此SELECT声明,我得到这个错误:ORA-00904: "GPASCORE": invalid identifier。如何gpaScore CASEWHERE子句中使用语句的结果?

SELECT
  (CASE grade
   WHEN 'A+'
     THEN 4
   WHEN 'A'
     THEN 4
   WHEN 'A-'
     THEN 3.7
   WHEN 'B+'
     THEN 3.3
   WHEN 'B'
     THEN 3
   WHEN 'B-'
     THEN 2.7
   WHEN 'C+'
     THEN 2.3
   WHEN 'C'
     THEN 2
   WHEN 'C-'
     THEN 1.7
   WHEN 'D+'
     THEN 1.3
   WHEN 'D'
     THEN 1
   WHEN 'D-'
     THEN 0.7
   WHEN 'F'
     THEN 0
   ELSE NULL END)   gpaScore
FROM PGFINALGRADES
WHERE gpaScore = 3
Run Code Online (Sandbox Code Playgroud)

oracle where

2
推荐指数
1
解决办法
6220
查看次数

多个子查询中的复杂连接

很抱歉一直打扰你们,但 SQL 对我来说仍然是新的。我有这些表:Store_location、Product、Sizes、Sells、Available_in、Offers 和 Currency。目标是能够运行一个包含多个子查询的查询(需要WHERE子句),该查询将仅返回在所有商店位置销售的产品,而不返回其他任何内容。它还必须是可扩展的,这样如果任何商店打开或关闭,代码就不需要更改。我有这些杂谈让我开始,但我不知道从哪里开始:下面的第一个 select 语句是查询成功时需要显示的内容。SELECT Store_location.store_name,Product.product_name,Sizes.size_option, COUNT(store_location.store_id) AS store_count

JOIN Sells ON Sells.store_location_id = Store_location.store_location_id
JOIN Product ON Product.product_id = Sells.product_id


JOIN ON Available_in.product_id = Product.product_id
JOIN ON Available_in.sizes_id = Sizes.sizes_id
Run Code Online (Sandbox Code Playgroud)

我试图完成连接以显示我需要使用的表在哪里有外键约束。如果您需要任何其他信息,我可以提供。我添加了一个链接,显示所有相关表格的内容。我知道我需要在 WHERE 语句中嵌入至少一个子查询,但不确定在那里放什么。我知道有很多信息需要回顾,我理解如果没有人有时间提供帮助,但任何指导都将不胜感激。

我意识到这是一个迟到的请求,但如果有人能帮助我在这方面也使用EXISTS,我将不胜感激。

join sql-server subquery count where

2
推荐指数
1
解决办法
8182
查看次数

SQL column=ALL(query):等价的意思

我知道这个表达:

WHERE column <> ALL(subquery)
Run Code Online (Sandbox Code Playgroud)

可以写成:

WHERE column NOT IN(subquery)
Run Code Online (Sandbox Code Playgroud)

什么是等价的

WHERE column = ALL(subquery)
Run Code Online (Sandbox Code Playgroud)

我认为支持ALL运算符的 SQL 方言之间不会有任何差异。

where

2
推荐指数
1
解决办法
107
查看次数

在 where 子句中使用不等式 (&lt;&gt;) 或 NOT 是否会导致 SQL 忽略索引?

我发现这篇文章谈到避免在 where 子句中使用 <> 运算符,因为优化器会忽略索引。

https://www.mssqltips.com/sqlservertutorial/3203/avoid-using-not-equal-in-where-clause/

这绝对是真的吗?

处理这个问题的最佳方法是什么?如何避免使用 <> ?

index sql-server where

2
推荐指数
1
解决办法
672
查看次数

SQL Server -- 重复(几乎)相同子查询的更有效替代方法

我需要提高 WHERE 子句中多个子查询的效率。上下文是现有产品的报告生成器。 我可以提供的唯一输入是 WHERE 子句。我有 3 个几乎相同的子查询,它们之间只有 1 个不同。我需要验证至少有 1 条记录符合每个条件。

这是查询的要点

Where
  Exists (Select 1 From t1  ...etc... where ...etc... and fld1='X')
  AND
  Exists (Select 1 From t1  ...etc... where ...etc... and fld1='Y')
  AND
  Exists (Select 1 From t1  ...etc... where ...etc... and fld1='Z')
Run Code Online (Sandbox Code Playgroud)

3 个子查询中的每一个中的“选择”都是相同的。它确实加入并在它的 Where 子句中有其他字段,包括对来自外部查询的 PK 的引用:我只显示不同之处。

t1 中大约有 50 万条记录。上面的查询现在已经运行了 30 多分钟。我需要把它缩短到 30 秒。

我的选择非常有限——没有 DECLARE,没有临时表,没有“OVER”。

sql-server subquery where

1
推荐指数
1
解决办法
2599
查看次数

在 WHERE 子句中使用日期时间列的 DATE 部分

我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。

我当前的查询如下所示:

SELECT * FROM tbl_item_trans
WHERE  (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。

我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime

@start@end变量使用date的数据类型,例如“2017年9月16日”。

sql-server date where

1
推荐指数
1
解决办法
1660
查看次数

SQL Server COUNT() 似乎忽略了 WHERE

我正在尝试设置一个 SQL Server 查询,该查询列出在会议活动期间注册参观的人数,然后显示总和。这是我即将接近的 SQL 代码,但它忽略了总计(但不是单个总计)的 WHERE 子句:

SELECT     SiteTour, COUNT(SiteTour) AS count
FROM       tblConference
WHERE      (RegistrationType NOT LIKE 'cancellation')
GROUP BY   SiteTour
UNION ALL
SELECT     'TOTAL' AS SiteTour, COUNT(SiteTour) AS Expr1
FROM       tblConference AS tblConference_1
Run Code Online (Sandbox Code Playgroud)

这是它正在生产的东西:

         0
Tour1   22
Tour2   30
Tour3   30
----------
TOTAL   83
Run Code Online (Sandbox Code Playgroud)

(Tour1 计数 22 是正确的,因为有一个 RegistrationType 取消。但是,83 的总数应该是 82。)

另外,我得到了一个初始行,我猜是基于对 NULL 的计数,显示为 0。有什么方法可以防止这种情况发生?

请帮我纠正这个问题。谢谢你。

sql-server count where

1
推荐指数
2
解决办法
1123
查看次数

SQL 初学者,需要帮助解决 WHERE 语法错误

我在使用 sql 查询时遇到问题,该查询应该查找至少出版了一本价格为 13 美元或更高的书的作者。只要作者至少出版了一本价格在 13 美元或以上的书,IT 就应该显示名字和姓氏,按姓氏排序。以下是我到目前为止的查询:

SELECT authors.au_fname, authors.au_lname, titles.price  
FROM authors, titles  ORDER BY au_lname ASC 
WHERE titles.price > "13";
Run Code Online (Sandbox Code Playgroud)

第一张图显示了数据库的第一个表作者,第二张图显示了包含价格列的标题。 图 1

图片2

我究竟做错了什么?我无法弄清楚我的语法有什么问题。

谢谢!

sql-server where

0
推荐指数
2
解决办法
3777
查看次数

左连接与 WHERE (Microsoft Access SQL)

给定以下 2 个表 a、b:

表一

ID job
1  farmer
2  physician
3  bank clerk
Run Code Online (Sandbox Code Playgroud)

表b

bID ID lang job
1   1  en   farmer
2   2  en   physician
3   3  en   bank clerk
4   2  de   Arzt
5   1  fr   paysan
Run Code Online (Sandbox Code Playgroud)

询问

SELECT a.ID, a.job, b.job FROM a LEFT JOIN b ON a.ID=b.ID WHERE b.lang='de'
Run Code Online (Sandbox Code Playgroud)

通缉:

a.ID a.job        b.job
1    farmer       -
2    physician    Arzt
3    bank clerk   -
Run Code Online (Sandbox Code Playgroud)

实际结果:

2    physician    Arzt
Run Code Online (Sandbox Code Playgroud)

有什么问题LEFT JOIN?我需要一些 (()) 吗?

join ms-access where

0
推荐指数
1
解决办法
1万
查看次数

给定一个带有 date_time 列的表,如何仅使用日期运行查询

我有一个带有表的数据库,该表有一列 datetime Date_Time。其格式例如:2021-09-01 13:15:16。我想设置一个独立于时间的查询,但只考虑日期。例如,给定这样的表:

Date_Time
2021-09-01 13:15:16
2021-09-01 10:25:12
2021-08-30 03:05:16
2021-08-29 13:15:16
...
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询,如:

SELECT Date_Time 
FROM dbo.Twitter 
WHERE Date_Time BETWEEN '2021-08-29' AND '2021-09-01' 
ORDER BY Date_Time DESC;
Run Code Online (Sandbox Code Playgroud)

这样的查询当然没有给我任何东西,因为在 BETWEEN 中没有指定小时。

所需的结果必须是您在上面看到的结果,因此所有来自 '2021-08-29 00:00:00' 和 '2021-09-01 23:59:59' 的行我试图将小时数强加给自己 00:00 :00 和 23:59:59 在 BETWEEN 命令中,但由于该时间没有记录,因此不返回任何内容。

无论何时,查询都应返回该日期的所有结果。

sql-server date-format datetime where

0
推荐指数
1
解决办法
39
查看次数