在 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
中,则会在该列的名称旁边放置一个复选框。否则它是一个文本字段。
所以在这种情况下,一个复选框将放在 Col1
和 Col4
旁边。
它应该是这样的: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.id
是 NULL
,则该列不在 checkbox
中
我有一个现有的 PHP 项目需要编辑。还有一个数据库,有一些内容。
部分 table 组织如下:
Table: tab_col
Col1
Col2
Col3
...
Table checkbox
id column
1 Col1
2 Col4
...
其中一项任务是显示 tab_col
的所有列。在它们旁边需要放置一个输入字段。如果 tab_col
中的其中一列的名称存在于 table checkbox
中,则会在该列的名称旁边放置一个复选框。否则它是一个文本字段。
所以在这种情况下,一个复选框将放在 Col1
和 Col4
旁边。
它应该是这样的: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.id
是 NULL
,则该列不在 checkbox