[英]MySQL: Defining columns in SELECT statement with subquery
我想指定使用子查询选择的列; 在MySQL中这可能吗? 例如,我有两个表:
CREATE TABLE table1 (
table1_id INT,
number VARCHAR,
color VARCHAR,
shape VARCHAR,
.
.
.
PRIMARY KEY (table1_id)
);
INSERT INTO table1 ('1', '25', 'purple', 'circle');
INSERT INTO table1 ('2', '30', 'orange', 'triangle');
INSERT INTO table1 ('3', '82', 'blue', 'square');
CREATE TABLE table2 (
name VARCHAR,
display BOOL,
flag2 BOOL,
.
.
PRIMARY KEY (name)
);
INSERT INTO table2 ('number', '0', '1');
INSERT INTO table2 ('color', '1', '1');
INSERT INTO table2 ('shape', '1', '1');
表2中的每个“名称”都是表1中的列名称之一(“ par1”,“ par2”等)。 由于如何创建数据并将其输入到数据库中,因此未将这些全部合并。
我想执行一条select语句(将用于创建视图),在该语句中,我仅返回由table2中的标志定义的table1中的列。 所以,我想做类似的事情:
SELECT (SELECT name FROM table2 WHERE (flag1="1" && flag2="0")) FROM table1;
编辑:似乎这样的事情应该工作:
SELECT * FROM table1 as t1, table2 as t2
WHERE t2.name IN(
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='db_name'
AND TABLE_NAME='table1')
AND t2.display="1";
如果我列出单个列名而不是子查询,它确实可以工作,但是我无法使mysql以正确的格式返回列名。
通过上面添加的示例数据,我想从table1中选择每一列,其中table2中具有display = true的条目。 因此,它应该为table1中的每个条目返回“颜色”和“形状”数据。
编辑2:上面的行不通,因为它仍然从表1中选择所有列,而不管表2中的条件如何。 我怀疑这在mysql中是不可能的,因为根据我发现的所有内容,您无法使用子查询来选择要返回的列。
给定上面的示例,我想要的回报是:
+-------------------+
| color | shape |
+-------------------+
| purple | circle |
| orange | triangle |
| blue | square |
+-------------------+
尝试这个:
SET @sql = (
SELECT GROUP_CONCAT(COLUMN_NAME) FROM
(SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='table1') a
JOIN table2
ON table2.name = a.column_name
WHERE table2.display = "1"
);
SET @query = CONCAT('SELECT ', @sql, ' FROM table1');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.