2017-09-14 119 views
-1

我在製作表達式時遇到困難,因爲我不知道如何進行正確的查詢命令。Mysql在行值之間進行選擇和比較

這是我想做的事:

Member Table 
member_id ----- member_name ----- late 
1   ----- John  ----- 0 
2   ----- Doe   ----- 4 
3   ----- Dennis  ----- 6 


Type Table 
type_id ----- type_name ----- ctr 
1  ----- Good  ----- 1 
2  ----- Bad  ----- 3 
3  ----- Very Bad ----- 5 

我想根據多少時間,他們遲到,

,如果他們遲到等於或小於1時,它們將被視爲好評價他們

如果他們的晚等於或超過3他們將被認爲是不好的

如果他們的晚等於或超過4他們將c onsidered非常糟糕

如何使查詢結果給予這樣的:

John ----- Good 
Doe ----- Bad 
Dennis ----- Very Bad 
+0

'late'列是否與'type_id'列相關?您的問題需要更多詳細信息 – cdsln

+0

關於爲什麼期望的結果是這樣的任何解釋? – fancyPants

+0

丹尼斯晚了= 3。爲什麼「壞」?對於其他人來說,它似乎是一個簡單的連接 – etsa

回答

1

,你可以嘗試這樣的事情(您必須修改您的TYPE表,並添加CTR_START和CTR_END):

CREATE TABLE MEMBER_TABLE (MEMBER_ID INT, MEMBER_NAME VARCHAR(20), LATE INT) 
INSERT INTO MEMBER_TABLE VALUES (1,'John', 0); 
INSERT INTO MEMBER_TABLE VALUES (2,'Doe', 4); 
INSERT INTO MEMBER_TABLE VALUES (3,'Dennis', 6); 

CREATE TABLE TYPE_TABLE (TYPE_ID INT, TYPE_NAME VARCHAR(20), CTR_START INT, CTR_END INT) 
INSERT INTO TYPE_TABLE VALUES (1,'Good', 0,2); 
INSERT INTO TYPE_TABLE VALUES (2,'Bad', 3,4); 
INSERT INTO TYPE_TABLE VALUES (3,'Very Bad', 5,999); 


SELECT A.MEMBER_NAME, B.TYPE_NAME 
FROM MEMBER_TABLE A 
LEFT JOIN TYPE_TABLE B ON A.late>= B.CTR_START AND A.LATE<=B.CTR_END; 

輸出:

MEMBER_NAME TYPE_NAME 
John Good 
Doe  Bad 
Dennis Very Bad 
+0

對不起,但你會解釋如何爲這種情況下適當的表設計 – Kelpie

+0

@Kelpie:看到我更新的答案 – etsa

+0

非常感謝你,這就是我想要做的。我沒有在type_table中定義最小值和最大值。 – Kelpie

0

我不知道我理解你正確,但:

SELECT m.member_name, t.type_name 
FROM members m JOIN types t ON m.late = t.type_id