2016-09-01 279 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並且作爲結果,我會從事件,如IDS:2 ,3,4,5

+0

如果您願意,請考慮遵循以下簡單的兩步操作步驟:1。如果您尚未這樣做,請提供適當的CREATE和INSERT語句(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

+0

以下是我的sqlfiddle:http://sqlfiddle.com/#!9/7a36f/1並因此我想從事件ID:2,3,4,5 – Alexking2005

+0

@ Alexking2005將來,只需將小代碼片段直接添加到您的問題中,而不是提供外部鏈接。看[如何問](http://stackoverflow.com/help/how-to-ask)一個很好的問題。 – Praveen

回答

1

只需添加一個或病狀的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 != '' 

編輯以取代events.used_by檢查來尋找非空,而不是NOT NULL基於更新的信息。

+0

http://sqlfiddle.com/#!9/7a36f/2正如你所看到的,它會返回所有的ID,我只需要2,3,4,5 – Alexking2005

+0

好吧,我更新了這個查找非空白,而不是不基於您的數據的特徵爲空: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不爲空的事件中選擇* used_by!=''

+0

感謝您的回答,不,因爲我想要激活idType的事件(即使這些內容在used_by中爲空)。 – Alexking2005