比较两个SQL条目的枚举索引

时间:2014-11-11 16:04:48

标签: mysql sql enums

我需要比较两个不同表中两个相似列的两个枚举值的索引。枚举值为New, Reviewed, Design, Production,并且在我们的流程中按状态的升序排列,因此根据New == 1Reviewed==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

这似乎是对字符串NEWREVIEW等进行字母比较...我需要它来比较索引,而不是值。这可能吗?

2 个答案:

答案 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;

http://www.sqlfiddle.com/#!2/906529/4