在 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 在语法上没有失败,但没有返回任何行。
我有这个查询:
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 BY从WHERE子句中选择行之后运行吗?
我KEY在first_number和last_number。我的桌子大约有 500 万行。我不想ORDER BY先。
当我尝试运行此SELECT声明,我得到这个错误:ORA-00904: "GPASCORE": invalid identifier。如何gpaScore CASE在WHERE子句中使用语句的结果?
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) 很抱歉一直打扰你们,但 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,我将不胜感激。
我知道这个表达:
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 子句中使用 <> 运算符,因为优化器会忽略索引。
https://www.mssqltips.com/sqlservertutorial/3203/avoid-using-not-equal-in-where-clause/
这绝对是真的吗?
处理这个问题的最佳方法是什么?如何避免使用 <> ?
我需要提高 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”。
我正在构建一个 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 查询,该查询列出在会议活动期间注册参观的人数,然后显示总和。这是我即将接近的 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 查询时遇到问题,该查询应该查找至少出版了一本价格为 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)
第一张图显示了数据库的第一个表作者,第二张图显示了包含价格列的标题。

我究竟做错了什么?我无法弄清楚我的语法有什么问题。
谢谢!
给定以下 2 个表 a、b:
ID job
1 farmer
2 physician
3 bank clerk
Run Code Online (Sandbox Code Playgroud)
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?我需要一些 (()) 吗?
我有一个带有表的数据库,该表有一列 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 命令中,但由于该时间没有记录,因此不返回任何内容。
无论何时,查询都应返回该日期的所有结果。
where ×12
sql-server ×7
count ×2
join ×2
subquery ×2
case ×1
date ×1
date-format ×1
datetime ×1
index ×1
ms-access ×1
mysql ×1
optimization ×1
oracle ×1
order-by ×1
postgresql ×1