MySQL无法选择特定的字段值?
在使用MySQL查询为Kayako Fusion生成一些外部报告时,我遇到了一个奇怪而恼人的问题。表中的一个字段包含一个“文本”字段,该字段可以包含两个值中的一个:41或40。如果最终用户未选择其中一个值,则默认值为NULL。(我无法改变这一点) 因此,在尝试执行简单的操作时:MySQL无法选择特定的字段值?,mysql,sql,null,Mysql,Sql,Null,在使用MySQL查询为Kayako Fusion生成一些外部报告时,我遇到了一个奇怪而恼人的问题。表中的一个字段包含一个“文本”字段,该字段可以包含两个值中的一个:41或40。如果最终用户未选择其中一个值,则默认值为NULL。(我无法改变这一点) 因此,在尝试执行简单的操作时: WHERE swcustomfieldvalues.fieldvalue = '41' 然后,它还返回具有空值(或者可能为“”)的记录 这同样适用于: WHERE swcustomfieldvalues.fieldva
WHERE swcustomfieldvalues.fieldvalue = '41'
然后,它还返回具有空值(或者可能为“”)的记录
这同样适用于:
WHERE swcustomfieldvalues.fieldvalue = '40'
我们还得到空记录(这有点准确,因为我们将空视为40)
为便于参考,40的值用于非收费工作,41的值用于收费工作
我遗漏了什么,或者有解决办法吗
以下是原始SQL语句:
SELECT
swtickets.ticketid AS `Ticket ID`,
swtickettimetracks.tickettimetrackid AS `Track ID`,
swtickets.ticketmaskid AS `TicketMASK`,
(
SELECT
swcustomfieldvalues.fieldvalue
FROM
swcustomfieldvalues,
swcustomfields
WHERE
swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
AND swtickets.ticketid = swcustomfieldvalues.typeid
AND swcustomfields.title = 'Member Company'
ORDER BY
swcustomfieldvalues.customfieldvalueid DESC
LIMIT 1
) AS MemberCompany,
(
SELECT
swcustomfieldvalues.fieldvalue
FROM
swcustomfieldvalues,
swcustomfields
WHERE
swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
AND swtickets.ticketid = swcustomfieldvalues.typeid
AND swcustomfields.title = 'Member Name'
ORDER BY
swcustomfieldvalues.customfieldvalueid DESC
LIMIT 1
) AS MemberName,
(
SELECT
swcustomfieldvalues.fieldvalue
FROM
swcustomfieldvalues,
swcustomfields
WHERE
swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
AND swtickets.ticketid = swcustomfieldvalues.typeid
AND swcustomfields.title = 'Chargeable'
AND swcustomfieldvalues.fieldvalue = '41'
ORDER BY
swcustomfieldvalues.customfieldvalueid ASC
LIMIT 1
) AS `Chg`,
swtickets.`subject` AS `Subject`,
swtickets.departmenttitle AS Category,
FROM_UNIXTIME(
swtickettimetracks.workdateline,
'%Y-%m-%d'
) AS `workDateline`,
FROM_UNIXTIME(
swtickettimetracks.dateline,
'%Y-%m-%d'
) AS `dateline`,
swtickettimetracks.timespent AS `Time Spent`,
swtickets.timeworked / 60 AS `Time Worked`
FROM
swtickets
RIGHT OUTER JOIN swusers ON swtickets.userid = swusers.userid
INNER JOIN swuserorganizations ON swuserorganizations.userorganizationid = swusers.userorganizationid
INNER JOIN swtickettimetracks ON swtickettimetracks.ticketid = swtickets.ticketid
WHERE
swuserorganizations.organizationname = 'Clarence Professional Offices'
AND (
swtickets.ticketstatustitle = 'Closed'
OR swtickets.ticketstatustitle = 'Completed'
)
AND swtickets.ticketid = '2895'
GROUP BY
`Ticket ID`,
`Track ID`
请善待我,我是新手;)
打破单个子选择(这是不可避免的),我可以证明,针对特定票据“2895”获取值为“41”的自定义字段“Chargeable”的单个子选择实际上是有效的!见:
SELECT
swcustomfieldvalues.fieldvalue,
swtickets.ticketid
FROM
swcustomfieldvalues,
swcustomfields,
swtickets
WHERE
swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
AND swtickets.ticketid = swcustomfieldvalues.typeid
AND swcustomfields.title = 'Chargeable'
AND swcustomfieldvalues.fieldvalue = '40'
AND swtickets.ticketid = '2895'
ORDER BY
swcustomfieldvalues.customfieldvalueid ASC
它返回一个TRUE,因为我知道这张票是不收费的(40)。如果我将该值更改为“41”(可收费),它将返回False(无记录)
整个SQL语句(原件)应该返回:在一个日期范围内可收费的所有票据,显示给我
车票ID/车票掩码、轨道ID、会员公司、会员姓名、是否收费?(40 | 41)、主题、类别、工作地点、日期、花费的时间和工作时间
然后在PHP中,我做了更多的操作,对小计等进行“中断”。但我离题了。在您的屏幕截图中,问题清楚地显示出来:您正在使用嵌套查询将select的结果直接返回到主select语句中 当筛选fieldvalue='40'时,此嵌套查询不返回NULL,它只是不返回任何内容(即:不返回任何行),这导致在主SELECT语句中显示NULL 如果您想实际筛选出与您提到的条件(fieldvalue)不匹配的记录,那么您应该在连接部分中包含此嵌套子查询,以实际减少生成的记录集
我无法提供查询,因为您没有将其粘贴到此处,但如果您需要,我将很乐意提供帮助。屏幕截图显示了部分但不是全部查询。如果只运行引用swcustomfieldvalues.fieldvalue为41的部分,它是否仍返回该字段中为null的记录?嗨,丹,上面的描述中添加了更多内容,包括完整的SQL谢谢。使用
右外部连接swusers
的具体原因是什么?如果不尝试使用内部联接
99%,这将导致获取空记录。它返回TRUE或FALSE是什么意思?swcustomfieldvalues.fieldvalue
在这两种情况下的值是多少?非常感谢您!我已经为你的评论添加了讨厌的SQL。非常感谢您提供的任何帮助。在您所有的嵌套子查询(选择部分中使用的子查询)中,哪一个是真正的过滤器,如果没有返回记录,哪一个应该返回null?嗯,我不太确定您的预期结果是什么,实际上,我需要一些详细信息。请参阅上面添加到我的问题中的其他信息。(再次)谢谢你!