为什么';这个查询在SQLite中不能工作,但在MySQL和MSAccess中可以正常工作吗?

为什么';这个查询在SQLite中不能工作,但在MySQL和MSAccess中可以正常工作吗?,mysql,sql,sqlite,Mysql,Sql,Sqlite,我有一个非常复杂的SQL查询,如图所示 在fiddle中,它在MySQL上运行良好,但当我在SQLite数据库上运行它时,它会抛出一个错误,引用: (1无此列:付款人付款。付款人id) 当该列明显存在时 或者只返回0个结果,具体取决于SQLite实现(WebSQL vs SQLite.js) 原因是什么?有没有可能使我的查询更不依赖数据库?在SQLite中,使用。 (如果您在查询中依赖于payers.id的实际值,则应明确给出。) 不需要嵌套联接时,不应尝试嵌套联接: SELECT payer_

我有一个非常复杂的SQL查询,如图所示

在fiddle中,它在MySQL上运行良好,但当我在SQLite数据库上运行它时,它会抛出一个错误,引用:

(1无此列:付款人付款。付款人id)

当该列明显存在时

或者只返回0个结果,具体取决于SQLite实现(WebSQL vs SQLite.js)


原因是什么?有没有可能使我的查询更不依赖数据库?

在SQLite中,使用。 (如果您在查询中依赖于
payers.id
的实际值,则应明确给出。)

不需要嵌套联接时,不应尝试嵌套联接:

SELECT payer_payment.payer_id,
       Sum(payer_payment.amount)                             AS total_paid,
       Sum(payer_payment.pays * payments_share.single_share) AS fair_share
FROM       payers
INNER JOIN payer_payment
        ON payers.id = payer_payment.payer_id
INNER JOIN (SELECT payment_id,
                   Sum(amount) / Sum(pays) AS single_share
            FROM   payer_payment
            GROUP  BY payment_id) AS payments_share
        ON payer_payment.payment_id = payments_share.payment_id
WHERE payers.user_id = 1
GROUP BY payer_payment.payer_id;

请看一看Hmmm,我去掉了多余的括号,但似乎没有什么帮助。事实上,它为MySQL打断了括号。请看一下您为SQLite制作的小提琴(末尾只有一行):。查看payers->id。我认为SQLite的SQLFiddle存在一些错误,并且autoincrement不起作用(或者,更可能的情况是,autoincrement在SQLite中被称为IDENTITY),查看一下我删除了auto_IDENTITY的这把小提琴:它在这里起作用非常感谢,我将在本地环境中尝试此方法,但嵌套联接可能是原因。关于模式,我只是在SQFiddle上测试查询;在我的Laravel应用程序上,模式是使用Laravel迁移正确构建的,因此将具有自动增量ID。确实是嵌套连接是罪魁祸首,再次感谢。
SELECT payer_payment.payer_id,
       Sum(payer_payment.amount)                             AS total_paid,
       Sum(payer_payment.pays * payments_share.single_share) AS fair_share
FROM       payers
INNER JOIN payer_payment
        ON payers.id = payer_payment.payer_id
INNER JOIN (SELECT payment_id,
                   Sum(amount) / Sum(pays) AS single_share
            FROM   payer_payment
            GROUP  BY payment_id) AS payments_share
        ON payer_payment.payment_id = payments_share.payment_id
WHERE payers.user_id = 1
GROUP BY payer_payment.payer_id;