2016-09-01 2 views
0

Мне нужна ваша помощь по запросу SQL. Вот мои таблицы:SQL нужна помощь по запросу

Таблица События:

id | idType | used_by 
1   1    Marc 
2   1     
3   1    Henry 

Типы Таблица:

id | name | activate 
1   Type 1   0 
2   Type 2   1 

Как вы можете видеть, у меня есть 1 типа инактивирует, но 2 человека, используя его. Я хотел бы отображать записи из событий, у которых активирован тип, а также отображать записи, которые используются кем-то, даже если тип инактивирован.

SQL, ниже отображает только событие, типа активированный:

CREATE TABLE events (id int(11), idType int(11), used_by varchar(50)); 
INSERT INTO events VALUES (1, 1, ''), (2, 1, 'Marc'), (3, 1, 'Henry'), (4, 2, ''), (5, 2, 'Sandy'); 

CREATE TABLE types (id int(11), name varchar(50), activate int(1)); 
INSERT INTO types VALUES (1, 'Type1' , 0), (2, 'Type 2', 1); 

SELECT events.id, types.name, events.used_by 
FROM events 
INNER JOIN types 
ON events.idType = types.id 
WHERE types.activate = 1 

Вот sqlfiddle: sqlfiddle.com/#!9/7a36f/1 и в результате я хотел бы от событий идентификаторов: 2 , 3, 4, 5

+0

Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, предоставьте правильные инструкции CREATE и INSERT (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry

+0

Вот мой sqlfiddle: http://sqlfiddle.com/#!9/7a36f/1 и в результате Я бы хотел, чтобы из событий ids: 2, 3, 4, 5 – Alexking2005

+0

@ Alexking2005 В будущем просто добавьте небольшие фрагменты кода в свой вопрос напрямую, вместо предоставления внешних ссылок. См. [Как спросить] (http://stackoverflow.com/help/how-to-ask) хороший вопрос. – Praveen

ответ

1

Просто добавьте условие OR для поля used_by:

SELECT events.id, types.name, events.used_by 
FROM events 
    INNER JOIN types 
    ON events.idType = types.id 
WHERE types.activate = 1 
    OR events.used_by != '' 

Edited заменить events.used_by чека искать не пустой, а не не NULL на основе обновленной информации.

+0

http://sqlfiddle.com/#!9/7a36f/2 Как вы можете видеть, он возвращает все идентификаторы, мне нужны только 2, 3, 4, 5 – Alexking2005

+0

Хорошо, я обновил это, чтобы искать непустые, а не не null на основе характеристик ваших данных: http://sqlfiddle.com/#!9/7a36f/8 – morgb

1

Попробуйте использовать

SELECT events.id, types.name, events.used_by FROM events INNER JOIN types ON events.idType = types.id WHERE types.activate=1 or trim(events.used_by)<>'' 

Или

SELECT events.id, types.name, events.used_by FROM events INNER JOIN types ON events.idType = types.id WHERE types.activate=1 or not isnull(events.used_by) 
1
Select e.* 
from evsnts e 
    join types t on t.id = e.idtype 
where t.Activate = 1 or 
     (e.used_by is not null and len(e.used_By) > 0) 
+0

http://sqlfiddle.com/#!9/7a36f/4 кажется, это свисток, спасибо. Мне удалось сделать то же самое с запросом на объединение, но я думаю, что ваш лучше, потому что профсоюз использует высокий ресурс. – Alexking2005

0

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

для этого вы можете упростить qyery по таблице событий

Выберите * из событий, где used_by не имеет значения null и used_by! = ''

+0

спасибо за ваш ответ, нет, потому что я хочу событий (даже если они пусты в used_by), для которых активирован idType. – Alexking2005

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