SQL语句-如何通过不同的SELECT使用多个CASE?

时间:2019-03-13 12:31:23

标签: mysql sql case

我对SQL还是很陌生,并且正在使用PHP Generator软件进行快速的应用程序开发。

我有一个下拉列表,需要对它应用SQL语句进行查找,以填充下拉列表。

如果这是Javascript,那会很容易,但是不确定如何进行SQL。

我的桌子上有不同类型的项目,每个项目的类型可以是:

'P'
'B'
'O'
'S'

当我打开一个项目时,它会加载其信息,并且我需要根据项目类型填充此下拉列表。

我的表格中的下拉列表是Tinyint

对于所选项目,我在全局变量中有一个ItemID(表中的PK),从那里检索该项目的Type,应该使用一个简单的SELECT工作:

SELECT ItemType
FROM TblItem
WHERE ItemID = [ItemID]

现在有了这个SELECT,我有了我的ItemType。

现在,我需要根据ItemType填充下拉列表

使用Java语言,我会做类似的事情:

switch(ItemType) {
  case 'B':
    // code block
    break;
  case 'P':
    // code block
    break;
 case 'S':
    // code block
    break;
 case 'O':
    // code block
    break;
}

对于每个CASE代码块,我将放置一个不同的SELECT语句来填充我的下拉菜单,例如:

case 'B':
  SELECT 0 AS TaskID, 'Installation' AS TaskName
  UNION
  SELECT 1 AS TaskID, 'Setup' AS TaskName
  UNION
  SELECT 2 AS TaskID, 'Feedback' AS TaskName
  UNION
  SELECT 3 AS TaskID, 'Customer' AS TaskName

case 'P':
  SELECT 4 AS TaskID, 'Production' AS TaskName
  UNION
  SELECT 5 AS TaskID, 'Debug' AS TaskName
  UNION
  SELECT 6 AS TaskID, 'Review' AS TaskName
  UNION
  SELECT 7 AS TaskID, 'Network' AS TaskName

,依此类推,因此每次我打开Item的详细信息视图时,我都会在全局变量中检索ItemID,然后应该使用此ID来检索ItemType如上所示,最后,在SQL中实现某种CASE语句以根据Type填充下拉列表

谢谢

2 个答案:

答案 0 :(得分:1)

SQL中的case语句用于非常不同的大小写:它会逐行切换大小写,而不是在查询级别。

我认为创建一个新表包含要存储在下拉列表中的项目会容易得多,然后使用itemId从该表中选择正确的行并填充下拉列表。像这样:

CREATE TABLE `dropdown` (
TaskID int(11) NOT NULL,
TaskName varchar(32) NOT NULL,
ItemID int(11) NOT NULL,
PRIMARY KEY(TaskID));

在这种情况下,您不必使用CASE语句并直接从表中选择所有必需的行。您甚至可以使用联接在一个查询中执行此操作。

答案 1 :(得分:1)

您可以使用INNER JOIN来技巧,当您将此表与过滤后的表{合并在一起时,将所有可能的下拉记录记录在我称为tblDropDownItems的表中,并带有一个额外的列引用ItemType。 {1}},您只有与检索到的项目类型相关的记录:

TblItem