Mysql select 其中值不相等
Mysql select where values not equal
获取错误:
1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL
server version for the right syntax to use near
't1.pard_suma LIMIT 0, 25' at line 5
NO DISTINCT error:
#1054 - Unknown column 't1.pard_suma' in 'having clause'
SELECT t1.invoice_nr
FROM irasai t1
LEFT JOIN apmokejimai t2 ON t1.invoice_nr = t2.invoice_nr
GROUP BY t1.id
HAVING SUM(DISTINCT t2.suma) <> t1.pard_suma
但是列存在!
如何解决这个问题?
这是我需要的东西,但我想得到所有 invoice_nr,其中 pard_suma 高于所有 apmokejimai.suma(用相同的 invoice_nr 求和)和invoice_nr 不存在于 apkomejimai table
谢谢。
HAVING
子句正在查找 <>
比较运算符右侧的静态值。所以你将不得不做这样的事情:
SELECT t1.*
FROM irasai t1
LEFT JOIN apmokejimai t2 ON t1.invoice_nr = t2.invoice_nr
GROUP BY t1.id
HAVING SUM(DISTINCT t2.suma) <> (
SELECT MAX(pard_suma)
FROM irasai
WHERE invoice_nr = t1.invoice_nr
GROUP BY invoice_nr
)
示例:http://sqlfiddle.com/#!9/90760/6
create table irasai (
id int,
invoice_nr int,
pard_suma int
);
create table apmokejimai (
invoice_nr int,
suma int
);
insert into irasai values (1, 1, 100);
insert into apmokejimai values (1, 20), (1, 40), (1, 40);
insert into irasai values (1, 1, 200);
insert into apmokejimai values (1, 40), (1, 80), (1, 81);
请注意,我故意在 apmokejimai 中输入的数据总计不超过 200。
在 <>
的 SQL 右侧,我创建了一个子查询来计算 HAVING
可以与之比较的数字。我猜这与您正在尝试做的有点相似。
**在评论中回答 OP 的问题*
create table irasai (
id int,
invoice_nr int,
pard_suma int
);
create table apmokejimai (
invoice_nr int,
suma int
);
insert into irasai values (1, 1, 100);
insert into apmokejimai values (1, 20), (1, 40), (1, 40);
insert into irasai values (2, 2, 200);
insert into apmokejimai values (2, 40), (2, 80), (2, 81);
insert into irasai values (3, 3, 300);
select
t1.invoice_nr,
max(t1.pard_suma) as pardtotal,
sum(t2.suma) as sumatotal
from irasai t1
left join apmokejimai t2 on t1.invoice_nr = t2.invoice_nr
group by invoice_nr
having pardtotal <> sumatotal or sumatotal is null
获取错误:
1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 't1.pard_suma LIMIT 0, 25' at line 5
NO DISTINCT error:
#1054 - Unknown column 't1.pard_suma' in 'having clause'
SELECT t1.invoice_nr
FROM irasai t1
LEFT JOIN apmokejimai t2 ON t1.invoice_nr = t2.invoice_nr
GROUP BY t1.id
HAVING SUM(DISTINCT t2.suma) <> t1.pard_suma
但是列存在!
如何解决这个问题?
这是我需要的东西,但我想得到所有 invoice_nr,其中 pard_suma 高于所有 apmokejimai.suma(用相同的 invoice_nr 求和)和invoice_nr 不存在于 apkomejimai table
谢谢。
HAVING
子句正在查找 <>
比较运算符右侧的静态值。所以你将不得不做这样的事情:
SELECT t1.*
FROM irasai t1
LEFT JOIN apmokejimai t2 ON t1.invoice_nr = t2.invoice_nr
GROUP BY t1.id
HAVING SUM(DISTINCT t2.suma) <> (
SELECT MAX(pard_suma)
FROM irasai
WHERE invoice_nr = t1.invoice_nr
GROUP BY invoice_nr
)
示例:http://sqlfiddle.com/#!9/90760/6
create table irasai (
id int,
invoice_nr int,
pard_suma int
);
create table apmokejimai (
invoice_nr int,
suma int
);
insert into irasai values (1, 1, 100);
insert into apmokejimai values (1, 20), (1, 40), (1, 40);
insert into irasai values (1, 1, 200);
insert into apmokejimai values (1, 40), (1, 80), (1, 81);
请注意,我故意在 apmokejimai 中输入的数据总计不超过 200。
在 <>
的 SQL 右侧,我创建了一个子查询来计算 HAVING
可以与之比较的数字。我猜这与您正在尝试做的有点相似。
**在评论中回答 OP 的问题*
create table irasai (
id int,
invoice_nr int,
pard_suma int
);
create table apmokejimai (
invoice_nr int,
suma int
);
insert into irasai values (1, 1, 100);
insert into apmokejimai values (1, 20), (1, 40), (1, 40);
insert into irasai values (2, 2, 200);
insert into apmokejimai values (2, 40), (2, 80), (2, 81);
insert into irasai values (3, 3, 300);
select
t1.invoice_nr,
max(t1.pard_suma) as pardtotal,
sum(t2.suma) as sumatotal
from irasai t1
left join apmokejimai t2 on t1.invoice_nr = t2.invoice_nr
group by invoice_nr
having pardtotal <> sumatotal or sumatotal is null