Кто-нибудь может решить это MySQL заявление WHERE COUNT проблема? - PullRequest
0 голосов
/ 22 ноября 2018

Я соединяю две таблицы вместе, и я хочу перечислить только те строки, количество групп которых не соответствует значению частей таблицы A.

table A
id     name    pieces
1      name_1    6
2      name_2    2

table B
a_id
1
1
2
2

Итак, я хочу получить все a.nameгде a.piece <> количество сгруппированных строк.
что-то вроде этого:

SELECT a.name
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
WHERE  a.pieces <> Count(*)
GROUP  BY id  

это приводит к недопустимому использованию групповой функции
, также пробовал это:

SELECT a.name,
       Count(*) AS count
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
WHERE  a.pieces <> count
GROUP  BY id 

ошибка: неизвестный столбец 'count'

В этом случае в результате я хочу получить только 1 строку, подобную этой:

name     count
name_1     2

Потому что name_1имеет 2 сгруппированных строки из table.b, и оно не соответствует a.piece, что составляет 6.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы можете объединить данные из таблицы и объединить их с таблицей:

SELECT tablea.name
FROM tablea
INNER JOIN (
    SELECT a_id, COUNT(*) AS c
    FROM tableb
    GROUP BY a_id
) AS groupedb ON tablea.id = tableb.a_id
WHERE tablea.pieces <> groupedb.c
0 голосов
/ 22 ноября 2018

Вы можете использовать MAX() на pieces, так как это только скалярное значение, оно не будет иметь значения.Это также сделает запрос совместимым с only_full_group_by mode

SELECT a.id, a.name, COUNT(*) AS count
FROM   a
       INNER JOIN b
               ON a.id = b.a_id
GROUP  BY a.id, a.name 
HAVING MAX(a.pieces) <> COUNT(*) 
...