2016-11-09 8 views
0

Может ли кто-нибудь помочь мне с переписанием этого запроса без UNION?Переписать SQL-запрос в другой форме без UNION

Мне нужен этот запрос без UNION для использования в HQL. Есть ли другой способ, как присоединиться к двум подобным выборкам?

Я считаю, что мне нужно объединить результаты этих двух запросов из одной таблицы в одном результате. Благодаря!

SELECT tab.name AS name FROM Table tab 
WHERE tab.name LIKE '%abc%' 
UNION 
SELECT TO_CHAR(tab.id) AS name FROM Table tab 
WHERE tab.id = 5 

ответ

1

Это было бы эквивалентно:

SELECT CASE 
      WHEN tab.id = 5 THEN TO_CHAR(tab.id) 
      ELSE tab.name 
     END AS name 
FROM Table tab 
WHERE tab.name LIKE '%abc%' 
OR tab.id = 5 
+1

, если нет записи, где 'имя LIKE '% ABC%' и ид = 5'; в этом случае переписывание не укажет имя, в то время как оригинал включает его. –

+0

@MarkAdelsberger да, я собирался добавить это заявление об отказе в свой ответ, но теперь я скорее позволю ему, как есть, и подтвердит ваш комментарий – Lamak

0
CREATE TABLE #TABLE(NAME VARCHAR(100)) 

INSERT INTO #TABLE(NAME) 
SELECT tab.NAME AS NAME 
FROM table tab 
WHERE tab.NAME LIKE '%abc%' 

INSERT INTO #TABLE(NAME) 
SELECT TO_CHAR(tab.id) AS NAME 
FROM table tab 
WHERE tab.id = 5 

SELECT NAME 
FROM #TABLE 
+0

Из [HQL] (https://docs.jboss.org/hibernate/orm/ 3.3/reference/en/html/queryhql.html) документация, которую я нашел в Интернете, я не вижу поддержки временных таблиц, используемых в вашем ответе. –