2014-11-12 7 views
0

Я попробовал UNION, но он не работает. # 1221 - Неправильное использование UNION и ORDER BY.Слияние двух SELECT в одну из одной таблицы?

SELECT members.Name, friends.MemberNumber1 
FROM friends 
INNER JOIN members ON friends.MemberNumber1= members.MemNo 
WHERE friends.MemberNumber2 LIKE 1 
ORDER BY members.Name 

UNION 

SELECT members.Name, friends.MemberNumber2 
FROM friends 
INNER JOIN members ON friends.MemberNumber2= members.MemNo 
WHERE friends.MemberNumber1 LIKE 1 
ORDER BY members.Name 

Оба запросов отлично работают сами по себе, но я стараюсь, чтобы иметь их в одном запросе, потому что я хочу «для каждого» на наборе результатов в JSTL после этого. Я также попытался создать псевдоним для friends.MemberNumber1 и friends.MemberNumber2, но ничего не изменил. Возможно, есть и более простой запрос, который я просто не вижу. Или мне нужно сделать два запроса?

Благодаря

+0

Я думаю, вам нужно только один заказ в конце? или использовать parenthasis – SatA

+0

Wow спасибо за это, я пробовал с круглыми скобками, с 1 заказом, но не с двумя одновременно ... он работает сейчас! Спасибо. (Я чувствую себя немым) –

+0

ПРЕДУПРЕЖДЕНИЕ это не работает, если у меня нет псевдонимов friends.MemberNumber1 и 2 –

ответ

1

Вы можете сделать производную таблицу, то заказ на. Имена столбцов должны совпадать. Я знаю, что этот ответ близок к Бармару, но имя aliasName для второго столбца важно. Вы также можете посмотреть разницу между UNION и UNION ALL, я использую последнее как правило.

SELECT Name , MemberNumber 
FROM (
    SELECT members.Name, friends.MemberNumber1 as MemberNumber 
    FROM friends 
    INNER JOIN members ON friends.MemberNumber1= members.MemNo 
    WHERE friends.MemberNumber2 LIKE 1 

    UNION ALL 

    SELECT members.Name, friends.MemberNumber2 as MemberNumber 
    FROM friends 
    INNER JOIN members ON friends.MemberNumber2= members.MemNo 
    WHERE friends.MemberNumber1 LIKE 1) AS derived1 
ORDER BY derived1.Name 
1

Вы должны поместить UNION в подзапрос, а затем заказать всю вещь.

SELECT * 
FROM (
    SELECT members.Name, friends.MemberNumber1 
    FROM friends 
    INNER JOIN members ON friends.MemberNumber1= members.MemNo 
    WHERE friends.MemberNumber2 LIKE 1 

    UNION 

    SELECT members.Name, friends.MemberNumber2 
    FROM friends 
    INNER JOIN members ON friends.MemberNumber2= members.MemNo 
    WHERE friends.MemberNumber1 LIKE 1) AS u 
ORDER BY u.Name 
1
(SELECT members.Name,  friends.MemberNumber1 
FROM friends 
INNER JOIN members ON   friends.MemberNumber1= members.MemNo 
WHERE friends.MemberNumber2 LIKE 1) 

UNION 

(SELECT members.Name,  friends.MemberNumber2 
FROM friends 
INNER JOIN members ON friends.MemberNumber2= members.MemNo 
WHERE friends.MemberNumber1 LIKE 1) 
ORDER BY members.Name 
0

он также удовлетворяет вашей логике запроса?

SELECT members.Name, friends.MemberNumber1 
FROM friends 
INNER JOIN members ON friends.MemberNumber1= members.MemNo 
WHERE friends.MemberNumber2 LIKE 1 OR friends.[primarykey] IN (

SELECT friend.[primarykey] 
FROM friends 
INNER JOIN members ON friends.MemberNumber2= members.MemNo 
WHERE friends.MemberNumber1 LIKE 1 

) 
0

Попробуйте это:

SELECT 
      * 
FROM 
(
    SELECT 
      Name = members.Name, 
      MemberNumber = friends.MemberNumber1 
    FROM  
      friends 
    INNER JOIN 
      members 
      ON friends.MemberNumber1= members.MemNo 
    WHERE 
      friends.MemberNumber2 LIKE 1 
    UNION ALL 
    SELECT 
      Name = members.Name, 
      MemberNumber = friends.MemberNumber2 
    FROM 
      friends 
    INNER JOIN 
      members ON friends.MemberNumber2= members.MemNo 
    WHERE 
      friends.MemberNumber1 LIKE 1 

) Unioned 
ORDER BY 
      Unioned.Name 

Если UNION ALL дает проблемы, попробуйте UNION

Смежные вопросы