ALL,
我刚试过以下查询:
SELECT cols.column_name, cols.data_type, cols.character_maximum_length, cols.character_octet_length,
cols.numeric_precision, cols.numeric_scale, cols.column_default, cols.is_nullable,
cols.ordinal_position, kcu.column_name
FROM information_schema.columns cols, information_schema.key_column_usage kcu
WHERE kcu.constraint_name = 'PRIMARY' AND kcu.table_schema = cols.table_schema AND
kcu.table_name = cols.table_name AND cols.table_schema = 'draft' AND cols.table_name = 'leagues';
该查询的最后一列确实返回主键列名称。
但是,我想看到的是:
如果列是主键,则查询将在最后一个查询列中输出“1”。
如果列不是主键,则查询将在最后一个查询列中输出“0”。
mySQL中是否有一个函数可以帮助我做到这一点?
谢谢。
答案 0 :(得分:0)
从不在FROM
子句中使用逗号。 始终使用正确的JOIN
语法。
“功能”是case
:
SELECT cols.column_name, cols.data_type, cols.character_maximum_length, cols.character_octet_length,
cols.numeric_precision, cols.numeric_scale, cols.column_default, cols.is_nullable,
cols.ordinal_position,
(CASE WHEN kcu.column_name IS NULL THEN 0 ELSE 1 END) as pk_flag
FROM information_schema.columns cols LEFT JOIN
information_schema.key_column_usage kcu
ON kcu.constraint_name = 'PRIMARY' AND kcu.table_schema = cols.table_schema AND
kcu.table_name = cols.table_name
WHERE cols.table_schema = 'draft' AND cols.table_name = 'leagues';
答案 1 :(得分:0)
这是我将使用的查询:
SELECT cols.column_name, cols.data_type, cols.character_maximum_length, cols.character_octet_length,
cols.numeric_precision, cols.numeric_scale, cols.column_default, cols.is_nullable,
cols.ordinal_position,
(CASE WHEN kcu.column_name = cols.column_name THEN 1 ELSE 0 END) as pk_flag
FROM information_schema.columns cols, information_schema.key_column_usage kcu
WHERE kcu.constraint_name = 'PRIMARY' AND kcu.table_schema = cols.table_schema AND
kcu.table_name = cols.table_name AND cols.table_schema = 'draft' AND cols.table_name = 'leagues';
它在mySQL Workbench中按预期工作。
答案 2 :(得分:0)
注意:这不是您问题的答案。
@Igor,这是我在两个表(FROM
,resp。table1
)上使用table2
运行选择查询的测试,与{{1}调用的select命令相比较 - 相同的表格。
正如您所提到的,确实存在差异:LEFT JOIN
- ing意味着表之间存在一个或多个关系,但LEFT JOIN
- 不存在(在上下文中)。
我的问题是,为什么/不应该提取来自不相关表的数据?
表格创建:
FROM
值插入:
-- Create table1 table.
CREATE TABLE `tests`.`table1` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL,
PRIMARY KEY (`id`));
-- Create table2 table.
CREATE TABLE `tests`.`table2` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL,
PRIMARY KEY (`id`));
表格预览:
-- Insert values into table1 table.
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('1', 'TAB1 1');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('2', 'TAB1 2');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('3', 'TAB1 3');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('4', 'TAB1 4');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('5', 'TAB1 5');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('6', 'TAB1 6');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('7', 'TAB1 7');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('8', 'TAB1 8');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('9', 'TAB1 9');
INSERT INTO `tests`.`table1` (`id`, `name`) VALUES ('10', 'TAB1 10');
-- Insert values into table2 table.
INSERT INTO `tests`.`table2` (`id`, `name`) VALUES ('1', 'TAB2 1');
INSERT INTO `tests`.`table2` (`id`, `name`) VALUES ('2', 'TAB2 2');
INSERT INTO `tests`.`table2` (`id`, `name`) VALUES ('3', 'TAB2 3');
查询&结果强>
FROM
查询&结果强>