我们有一个遗留表Prop
,根据value
的符号,它会告诉您是否引用PropLong
或PropShort
表。要明确Prop.value > 0
是否PropShort
其他PropLong
。
现在我想基于最终值构建动态查询。我不知道该怎么做。我已经有了一个查询(随意评论这个),它会将最终值拉回(str_value
但我不知道如何修改它以便我可以进一步扩展我的查询{{1 }}
str_value
现在SELECT *,
IFNULL(PropShort.str, PropLong.str) AS str_value FROM Prop
LEFT JOIN PropShort ON sid=Prop.value
LEFT JOIN PropLong ON lid=-Prop.value
在哪里?我特别关注OR'ing多个查询(即WHERE PropShort.str=%s OR PropLong.str=%s
)
表定义
WHERE PropShort.str=%s OR PropLong.str=%s OR behavior="foo"
答案 0 :(得分:1)
这取决于......但可能
SELECT *,
IFNULL(PropShort.str, PropLong.str) AS str_value
FROM
Prop
LEFT JOIN PropShort
ON sid=Prop.value
AND PropShort.str=%s
LEFT JOIN PropLong
ON lid=-Prop.value
AND PropLong.str=%s
现在这仍然会使您的“Prop”表成为主要表,但只会根据各自的条件加入相应的其他表。所以你可以通过ID获得一个PropShort,但是不匹配.str,但是有一个有效的PropLONG匹配ID并且有正确的.str来获得你想要的东西。