2016-12-08 2 views
1

Я две таблицы с данными ниже:оракул граф SQL из другой таблицы

1) Транс Таблица

TICKET STATUS 
56  0 
56  0 

2) Реза Таблица

R_TICKET R_STATUS 
56   0 

Я хочу привести как это, если количество билетов в обеих таблицах совпадает с печатью 0 еще 1.

Я пробовал ниже запрос, но он не работает

select case when count(a.ticket) = count(b.r_ticket) 
      then 0 
      else 1 
     end as result 
from trans a, resa b 

это показывает 0, но это должно быть 1 потому что подсчет билета 56 является 2 в trans и 1 в resa.

Некоторые изменения в вопросе: Я хочу, чтобы результат:

TICKET Count(Ticket) r_Ticket Count(r_Ticket) result 
56  2    56   1   1 
58  1    58   1   0 
+0

Вопрос не ясен. Что такое «количество билетов»? В вашей первой таблице у вас есть один билет, 56. Вы имеете в виду «количество строк», а не «количество билетов»? Что делать, если в таблицах указано более одного номера билета - подсчитываете ли вы все строки в таблицах? Все строки сгруппированы по номеру билета? Все разные билеты в столах? Является ли результатом сравнение таблиц или сравнение по номеру билета? (Подсчеты равны для билета 56, разные для билета 58 и т. Д.?) – mathguy

+0

номер билета может быть другим, я хочу, чтобы количество билетов соответствовало, например, в примере в первом билете номер 56 повторяется два раза, а во втором таблица повторяется 1 раз, поэтому это несоответствие должно быть напечатано 1. Но если другой билет предполагает, что 58 повторяется в 2 раза в первой таблице, а также 2 раза во второй таблице, он должен соответствовать 0. –

+0

Тогда решение @Tim Biegeleisen точно что ты ищешь. – mathguy

ответ

0
SELECT COALESCE(t1.ticket, t2.ticket), 
     CASE WHEN t1.count = t2.count THEN 0 ELSE 1 END AS match 
FROM 
(
    SELECT TICKET AS ticket, COUNT(*) AS tcount 
    FROM Trans 
    GROUP BY TICKET 
) t1 
FULL OUTER JOIN 
(
    SELECT R_TICKET AS ticket, COUNT(*) AS tcount 
    FROM Resa 
    GROUP BY R_TICKET 
) t2 
    ON t1.ticket = t2.ticket 
+0

Проверьте правильность синтаксиса Oracle (и я подозреваю синтаксис SQL Standard) для предложения WITH, когда у вас более одного CTE. – mathguy

+0

@mathguy Я не знал о ограничениях Cte Oracle. Вместо этого я просто использовал прямые подзапросы. Меньше аромата, больше кода. –

+0

Я не знаю, какие ограничения Oracle CTE вы имеете в виду. Oracle реализует синтаксис SQL Standard для CTE. Когда у вас более одного, вы разделяете их запятой, вы снова не записываете WITH. Существует ли СУБД, которую вы используете чаще, где это правильный синтаксис? (Извините, я знаю только Oracle.) Помимо этого предложения WITH - отличный инструмент. – mathguy

0

Не используйте запятые в предложении from. В любом случае это неверно. , , если одна из таблиц пуста, вы получите пустой промежуточный результат перед агрегацией.

Вместо этого следует использовать подзапросы, чтобы получить отсчеты:

select (case when a.cnt = b.cnt then 0 else 1 
     end) as result 
from (select count(*) as cnt from trans) a 
cross join 
    (select count(*) as cnt from resa b); 
+0

Спасибо за ваш быстрый ответ. –

+0

На самом деле, я не хочу, чтобы подсчет числа строк соответствовал, я хочу, чтобы количество номеров билетов соответствовало. –

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