在 1 个查询中合并 2 个需求

Combine 2 requirements in 1 query

我有一个现有的 PHP 项目需要编辑。还有一个数据库,有一些内容。

部分 table 组织如下:

Table: tab_col

Col1
Col2
Col3
...

Table checkbox

id   column
1    Col1
2    Col4
...

其中一项任务是显示 tab_col 的所有列。在它们旁边需要放置一个输入字段。如果 tab_col 中的其中一列的名称存在于 table checkbox 中,则会在该列的名称旁边放置一个复选框。否则它是一个文本字段。

所以在这种情况下,一个复选框将放在 Col1Col4 旁边。
它应该是这样的:https://jsfiddle.net/e7Lpfs9f/

实际上,我只对 SQL 查询感兴趣。


通过这个查询,我得到了所有列:

SHOW columns FROM tab_col

但是我怎样才能在一个查询中结合这两个要求呢?我不想查询数据库两次。


PS:我知道,这可能不是在数据库中存储数据的最佳方式,但这是我必须使用的方式。

您可以使用存储过程解决这个问题

WITH CTE1 (
        SELECT column_name
        FROM [DB_NAME].INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = N'tbl_col'
    )

WITH CTE2 (
        SELECT column_name
        FROM [DB_NAME].INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = N'checkbox'
    )

SELECT c1.column_name, 
     CASE ISNULL(c2.column_name,'0')
             WHEN '0' THEN 'checkbox'
             ELSE 'textbox'
     END 
         FROM CTE1 c1
   LEFT JOIN CTE2 c2 on c2.column_name = c1.column_name

因此如果tbl_coltable和checkboxtable匹配就是textbox,否则就是checkbox

你可以做到

SELECT t1.column_name, ch.id
FROM information_schema.Columns t1
LEFT JOIN checkbox ch
  ON t1.column_name = ch.column
WHERE t1.table_name = 'tab_col'
ORDER BY t1.column_name;

如果 ch.idNULL,则该列不在 checkbox