如何查看单列数据
How to view data on single column
我正在尝试创建 table 的视图,其中包含相关数据的多个 table 与 5 个单独的 [=26] 相比更具可读性 table =]s.
正在加入的所有这些 table 都包含作为外键的预订参考。
这些 table 中的大多数都包含与单个预订参考相关的多个条目。
例如一些预订有多只猫
这是我创建的视图语句:
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
这是结果 table:
(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 的条目,据我所知,我遵循的格式应该未规范化此视图,并在单个字段中显示多组数据。
可能问题出在您的 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
我正在尝试创建 table 的视图,其中包含相关数据的多个 table 与 5 个单独的 [=26] 相比更具可读性 table =]s.
正在加入的所有这些 table 都包含作为外键的预订参考。
这些 table 中的大多数都包含与单个预订参考相关的多个条目。
例如一些预订有多只猫
这是我创建的视图语句:
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
这是结果 table:
(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 的条目,据我所知,我遵循的格式应该未规范化此视图,并在单个字段中显示多组数据。
可能问题出在您的 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