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

示例:http://sqlfiddle.com/#!9/fb331/3