请看图片。与表“participants
‘执行时为什么mysql中的这个查询可以正常工作,但不能与该表的视图匹配?
下面的查询的伟大工程:
SELECT
*
FROM
(SELECT
p.*, @curRow:[email protected] + 1 AS position
FROM
(SELECT @curRow:=0) r,
participants p
WHERE
(p.isVolunteer = 0
OR p.isVolunteer IS NULL)
GROUP BY p.id
ORDER BY p.lastRegistrationDate DESC
LIMIT 0 , 25) AS p
INNER JOIN
participants_registrations pr ON p.id = pr.participantId
INNER JOIN
registrations r ON pr.registrationId = r.id
ORDER BY p.position ASC , r.createdOn DESC
但是,当我更换’participants
”通过视图“vparticipants
”我不能得到相同的结果,那就是suposed应该是一样的。
问题是结果的顺序是不同的。
使用该表,我得到了createdOn
列(日期)和position
列中值从1到25开始排序的行,但使用视图'vparticipants'我得到的列'position'从6开始到30,并且列创建的顺序方向顺序。我需要与表格相同的结果。
的观点很简单,在这里:
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `vparticipants` AS
SELECT
`participants`.`id` AS `id`,
`participants`.`identificationNumber` AS `identificationNumber`,
`participants`.`firstName` AS `firstName`,
`participants`.`lastName` AS `lastName`,
`participants`.`email` AS `email`,
`participants`.`cellphone` AS `cellphone`,
`participants`.`city` AS `city`,
`participants`.`gender` AS `gender`,
`participants`.`shirtSize` AS `shirtSize`,
`participants`.`bloodType` AS `bloodType`,
`participants`.`emergencyContactName` AS `emergencyContactName`,
`participants`.`emergencyContactPhone` AS `emergencyContactPhone`,
`participants`.`eps` AS `eps`,
`participants`.`birthday` AS `birthday`,
`participants`.`memberOfGroupId` AS `memberOfGroupId`,
`participants`.`memberOfGroupName` AS `memberOfGroupName`,
`participants`.`lastRegistrationDate` AS `lastRegistrationDate`,
`participants`.`isVolunteer` AS `isVolunteer`,
`agreements_signatures`.`signatureRequest` AS `signatureRequest`,
`agreements_signatures`.`signature` AS `signature`,
`agreements_signatures`.`manualSignature` AS `manualSignature`,
`agreements_signatures`.`fromWhereWasSigned` AS `fromWhereWasSigned`,
`agreements_signatures`.`responsibleName` AS `responsibleName`,
`agreements_signatures`.`responsibleIdentificationNumber` AS `responsibleIdentificationNumber`,
`agreements_signatures`.`expeditionPlace` AS `expeditionPlace`,
`agreements_signatures`.`signedIn` AS `signedIn`
FROM
((`participants`
LEFT JOIN `participants_registrations` ON ((`participants_registrations`.`participantId` = `participants`.`id`)))
LEFT JOIN `agreements_signatures` ON ((`agreements_signatures`.`id` = `participants_registrations`.`agreementSignatureId`)))
感谢任何帮助。
对于使用视图是必要的,因为它提供了协议签名表列 –
您有一个GROUP BY子句,但没有聚合函数。通常情况下,这将返回广泛不确定的结果,但可能会受到可能存在的任何索引的影响。在MySQL中,视图(我认为)没有索引的意识,所以我怀疑这可能会影响结果。 – Strawberry