2013-02-18 1 views
1

я улучшил свой вопрос с примерами таблицами для лучшего пониманиявыбрать из нескольких таблиц, когда один никогда не используются

У меня есть 3 таблицы со следующими строками:

TABLE1 t1     TABLE t2    TABLE t3 

ID NAME OBS   ID HW_VER   ID SERIAL 
-----------------   -----------   ------------ 
1 | Name1 | Obs1   1 | HWVer1   5 | Serial5 
2 | Name2 | Obs2   2 | HWVer2   6 | Serial6 
3 | Name3 | Obs3   3 | HWVer3   7 | Serial7 
4 | Name4 | Obs4 
5 | Name5 | Obs5 
6 | Name6 | Obs6 
7 | Name7 | Obs7 

Теперь я хочу, чтобы выбрать id, name и obs при выполнении 2 условий:

  1. id присутствует в t2 или t3 (никогда в обоих случаях);
  2. это относится либо к t2 t3 или атрибутов (например, t2.HW_VER = 'HWVER1.), А не на обоих

я сделал что-то вроде этого, но это не так:

SELECT DISTINCT t1.id, t1.name, t1.obs 
FROM table1 t1, table2 t2, table3 t3 
WHERE t1.id IN (t2.id, t3.id) AND t3.serial='Serial6'; 

I не могут использовать для этого союзы, внешние таблицы или представления. Пожалуйста, дайте мне знать в случае возникновения дополнительных вопросов.

Большое спасибо за ваши ответы, я очень ценю ваше время ..

+2

Вопрос в том, что вы пытаетесь сосчитать? –

+0

Пожалуйста, разместите образцы данных с нужным результатом - ваш вопрос немного неясен. – sgeddes

+0

Ваша проблема трудно представить без понимания вашей схемы. Но ваше предложение where фактически является OR. попробуйте сделать его AND: где t1.id = t2.id AND t1.id = t3.id. – NickJ

ответ

0

Вам нужно выбрать из Т2 или Т3, но не оба? Я думаю, вы хотите что-то вроде этого

select count(*) 
from t1 
where exists (
    select 'x' 
    from t2 
    where MyPrimaryKey_Name = 'random_name' 
    and t2.id = t1.id 
) 
or exists (
    select 'x' 
    from t3 
    where MyPrimaryKey_Name = 'random_name' 
    and t3.id = t1.id 
) 
Смежные вопросы