Как просмотреть данные в одном столбце - PullRequest
0 голосов
/ 10 апреля 2020

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

Все эти объединяемые таблицы содержат ссылка на бронирование в качестве внешнего ключа.

Большинство этих таблиц содержат несколько записей, относящихся к одной ссылке на бронирование.

например, есть несколько кошек для некоторых бронирований

Вот оператор представления, который я создал:

USE CATTERY;
CREATE VIEW ALLBOOKING
AS
SELECT BOOK.Ref, BOOK.Food, BOOK.Interact, BOOK.Litter, BOOK.Start_Date, BOOK.End_Date, BOOK.Deposit, BOOK.Cost,
    GROUP_CONCAT( DISTINCT BOOKOWNER.ID) AS `Owner`,
    GROUP_CONCAT( DISTINCT BOOKCAT.Chip_ID) AS Cats,
    GROUP_CONCAT( DISTINCT BOOKOBS.ID) AS Observations,
    GROUP_CONCAT( DISTINCT BOOKROOM.ID) AS Room
FROM BOOK 
INNER JOIN BOOKOWNER ON BOOK.Ref = BOOKOWNER.Ref 
INNER JOIN BOOKCAT ON OOK.Ref = BOOKCAT.Ref
INNER JOIN BOOKOBS ON BOOK.Ref = BOOKOBS.Ref 
INNER JOIN BOOKROOM ON BOOK.Ref = BOOKROOM.Ref 

GROUP BY BOOK.Ref, BOOKOWNER.ID, BOOKCAT.Chip_ID, BOOKOBS.ID, BOOKROOM.ID

и вот итоговая таблица:

(ref)(food)(interact)(litter)(start date)(end date)(deposit)(cost)(owner)(catid)(observations)(room) 
'1', '1', '1', '0', '2019-11-22', '2019-11-25', '5', '53', '1', '1', '1', '4'
'1', '1', '1', '0', '2019-11-22', '2019-11-25', '5', '53', '1', '1', '2', '4'
'1', '1', '1', '0', '2019-11-22', '2019-11-25', '5', '53', '1', '1', '3', '4'
'1', '1', '1', '0', '2019-11-22', '2019-11-25', '5', '53', '1', '1', '4', '4'
'2', '0', '0', '2', '2019-11-24', '2019-11-28', '10', '104', '1', '2', '5', '3'

Как вы можете видеть, есть несколько записей, касающихся ссылочного номера 1, из того, что я знаю, формат, которому я следовал, должен был ненормализовать это представление и показать несколько наборов данных в одном поле.

1 Ответ

1 голос
/ 10 апреля 2020

Вероятно, проблема в предложении GROUP BY, столбцы которого не соответствуют неагрегированным столбцам в предложении SELECT. На самом деле у вас даже есть агрегированные столбцы в предложении GROUP BY: например, BOOKOWNER.ID принадлежит как одному из GROUP_CONCAT() выражений , так и к предложению GROUP BY.

В большинстве баз данных это может привести к ошибке (а также к MySQL, если включен режим sql ONLY_FULL_GROUP_BY).

Попробуйте изменить это:

GROUP BY BOOK.Ref, BOOKOWNER.ID, BOOKCAT.Chip_ID, BOOKOBS.ID, BOOKROOM.ID

Кому:

GROUP BY 
    BOOK.Ref, 
    BOOK.Food, 
    BOOK.Interact, 
    BOOK.Litter, 
    BOOK.Start_Date, 
    BOOK.End_Date, 
    BOOK.Deposit, 
    BOOK.Cost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...