mysql如果条件满足则执行join否则不执行

时间:2015-05-27 13:16:56

标签: php mysql sql join yii

嗨,我被查询困住了。我想只在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语句的查询。

请帮忙。

1 个答案:

答案 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将解决所有问题......