繁体   English   中英

MySQL:使用子查询定义SELECT语句中的列

[英]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;

SQLFiddle演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM