首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使查询在SQLite和MySQL上工作

使查询在SQLite和MySQL上工作
EN

Database Administration用户
提问于 2020-04-09 14:37:03
回答 2查看 228关注 0票数 1

我在主查询where子句中有一个带有条件的子查询。

下面是示例模式

代码语言:javascript
复制
CREATE TABLE `payments` (  
  `id` int(11) NOT NULL,
  `discount_id` int(11),
  `amount` int(11) 
);

CREATE TABLE `discounts` (
  `id` int(11) NOT NULL,
  `rate` int(11) NOT NULL
);

和查询

代码语言:javascript
复制
SELECT 
  discounts.*, 
  (SELECT COUNT(id) 
   FROM payments 
   WHERE payments.discount_id = discounts.id 
   GROUP BY payments.discount_id) AS usage_count
FROM discounts   
WHERE
  rate > 10
  AND usage_count > 1
  • 工作于SQLite:http://sqlfiddle.com/#!5/9f159/2
  • 不工作于MySQL:http://sqlfiddle.com/#!9/9f1593/1

MySQL显示错误Unknown column 'usage_count' in 'where clause'

我可以让它在MySQL上使用HAVING子句,但是在SQLite和TypeError: e.STATEMENT is undefined上,它会失败。

  • 不工作于SQLite:http://sqlfiddle.com/#!5/9f159
  • 工作于MySQL:http://sqlfiddle.com/#!9/9f1593/2

有没有办法让两者都有一种单一的工作方式呢?

为什么?我正在使用Laravel框架进行开发,我们的单元测试运行在SQLite上,应用服务器运行MySQL。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-04-11 02:07:14

或者作为一个连接,因为您的子查询只是一个连接,而其中只基于折扣。

代码语言:javascript
复制
SELECT 
  discounts.*, count(*) as usage_count
FROM discounts   
JOIN payments
  ON payments.discount_id = discounts.id 
WHERE
  rate > 10
GROUP BY payments.discount_id
HAVING usage_count > 1
票数 1
EN

Database Administration用户

发布于 2020-04-09 14:58:18

代码语言:javascript
复制
SELECT * FROM 
  (SELECT 
  discounts.*, 
  (SELECT COUNT(id) 
   FROM payments 
   WHERE payments.discount_id = discounts.id 
   GROUP BY payments.discount_id) AS usage_count
FROM discounts   
WHERE rate > 10) table1 
WHERE usage_count > 1
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/264690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档