我需要比较两个不同表中两个相似列的两个枚举值的索引。枚举值为New, Reviewed, Design, Production
,并且在我们的流程中按状态的升序排列,因此根据New == 1
,Reviewed==2
等的想法进行比较应该相对容易。 ..
我正在尝试:
SELECT CASE WHEN table1.review_status < table2.review_status THEN table1.review_status
WHEN table2.review_status < table1.review_status THEN table2.review_status
END
这似乎是对字符串NEW
,REVIEW
等进行字母比较...我需要它来比较索引,而不是值。这可能吗?
答案 0 :(得分:1)
制作一张新桌子。称之为ReviewStatusDefinitions。该表将包含两列:StatusName和StatusOrder。 StatusName列将包含&#34; New&#34;,&#34; Review&#34;等等的值,StatusOrder列将具有相应的数值1,2等。现在您可以加入此表并使用CASE的StatusOrder列。
答案 1 :(得分:1)
将0添加到枚举值,将其转换为数字比较的数字。
https://dev.mysql.com/doc/refman/5.7/en/enum.html
create table table1 (
id int,
review_status enum('New', 'Reviewed', 'Design', 'Production')
);
insert into table1 values
(1, 'New'), (2, 'Production'), (3, 'Design'), (4, 'Reviewed');
create table table2 (
id int,
review_status enum('New', 'Reviewed', 'Design', 'Production')
);
insert into table2 values
(1, 'Design'), (2, 'New'), (3, 'Reviewed'), (4, 'Reviewed');
select table1.id, table1.review_status s1, table2.review_status s2,
CASE WHEN table1.review_status+0 < table2.review_status THEN table1.review_status
WHEN table2.review_status+0 < table1.review_status THEN table2.review_status
END
from table1
join table2 on table2.id = table1.id;