我是MyBatis的新手,我使用的是3.2.3版本。我需要在MySql中使用UNION而不是IN,下面是查询,它可以很好地处理Sequal。
SELECT DISTINCT * FROM room WHERE roomNo NOT IN (
SELECT roomNo FROM reservation WHERE resvStatus='DONE' AND checkout > "2014-04-27" AND checkout <= "2014-04-29"
UNION
SELECT roomNo FROM reservation WHERE resvStatus='DONE' AND checkin >= "2014-04-27" AND checkin < "2014-04-29"
UNION
SELECT roomNo FROM reservation WHERE resvStatus='DONE' AND checkin < "2014-04-27" AND checkout > "2014-04-29"
)
如果我把这个查询放在MyBatis XML文件中,那么它就会显示语法错误。
<select id="roomSearch" parameterType="map" resultType="Room">
SELECT DISTINCT * FROM room WHERE roomNo NOT IN (
SELECT roomNo FROM reservation WHERE resvStatus='DONE' AND checkout > #{checkIn} AND checkout <= #{checkOut}
UNION
SELECT roomNo FROM reservation WHERE resvStatus='DONE' AND checkin >= #{checkIn} AND checkin < #{checkOut}
UNION
SELECT roomNo FROM reservation WHERE resvStatus='DONE' AND checkin < #{checkIn} AND checkout > #{checkOut}
)
</select>
我可以在MyBatis中像这样使用UNION吗?我在网上搜索,但找不到确切的答案。也许我需要更改我的查询以获得使用MyBatis的结果。请给我一些建议。谢谢!
发布于 2014-04-07 08:04:55
当我在网上搜索几个小时时,我找到了答案。基本上,您不能使用<。相反,您应该使用字符之间没有空格的&l;,就像HTML代码一样。下面是我刚刚测试的工作代码。
<select id="searchRoom" parameterType="map" resultType="Room">
SELECT DISTINCT * FROM room WHERE roomNo NOT IN (
SELECT roomNo FROM reservation WHERE resvStatus="DONE" AND checkout > #{checkIn} AND checkout <= #{checkOut}
UNION
SELECT roomNo FROM reservation WHERE resvStatus="DONE" AND checkin >= #{checkIn} AND checkin < #{checkOut}
UNION
SELECT roomNo FROM reservation WHERE resvStatus="DONE" AND checkin < #{checkIn} AND checkout > #{checkOut}
)
</select>
我原以为工会行不通,但我错了。你可以用联合公司。
而且,我尝试过使用<![CDATA[ ......... ]]>
,但它没有起作用。我的Tomcat服务器说XML文件中有一个错误。我不确定它是否适用于其他案件。
因此,使用<将是最简单的方法。
https://stackoverflow.com/questions/22891680
复制相似问题