嗨,我被查询困住了。我想只在if语句中的条件为true时执行join语句,否则不执行join,让其余的查询执行。
例如,我的查询是这样的:
SELECT `t`.`id`, `t`.`title`, `t`.`date_created`, `t`.`video_id`, `t`.`audio_id`, `t`.`created_by`, `t`.`updated`, `t`.`gamenumber`, `t`.`cat_id`, `t`.`is_deleted`, `t`.`marked_by`, `t`.`is_hidden`, `t`.`battle_type`, `t`.`media` FROM `postdata` `t`
如果t.video_id!=''然后运行join语句
left join processes as pv on ( pv.video_id = t.video_id)
整个查询中常见的WHERE语句
cat_id IS NOT NULL and is_deleted=0 and is_hidden=0 and battle_type="public" ORDER BY date_created
如果t.video_id!='' WHERE语句也需要这个条件。那么
pv.status=3
基本上如果" postdata'表格包含字段' video_id'其中包含视频ID。并且'流程'表也包含这些video_id。因此,如果postdata.video_id不为空,则执行join语句以检查video_id是否为进程表包含status = 3。 (如果status = 3,则只获取视频记录)否则,如果postdata.video_id为空,则执行不带连接语句和公共Where语句的查询。
请帮忙。
答案 0 :(得分:0)
我认为您应该每次都使用左连接并添加DECLARE @x varchar(max) = '<?xml version="1.0" encoding="UTF-8"?>
<AuditTrail>
<Action />
<ActionDetail />
<ChangesXML>
<Details>
<Object ObjectType="Data.Review_Extension" AuditType="Modified" FriendlyName="Review">
<ObjectKeys>
<ReviewExtID>21482283</ReviewExtID>
</ObjectKeys>
<Properties>
<Property name="Document Type 01" FieldName="Document_Type_01" TemplateFieldID="644140" ReviewExtensionID="214822182" PropertyType="System.String">
<OldValue />
<NewValue><![CDATA[1145]]></NewValue>
</Property>
<Property name="Document Type 02" FieldName="Document_Type_02" TemplateFieldID="644141" ReviewExtensionID="21482283" PropertyType="System.String">
<OldValue />
<NewValue><![CDATA[123]]></NewValue>
</Property>
</Properties>
</Object>
</Details>
</ChangesXML>
</AuditTrail>'
DECLARE @t TABLE (userid INT, [xml] varchar(max))
INSERT @t VALUES(1, @x)
SELECT t.userid, r.z.value('@FieldName', 'nvarchar(MAX)')
FROM @t t
OUTER APPLY t.xml.nodes('//Property') as r(z)
来加入条件,例如:
pv.status=3
和mysql将解决所有问题......