Mysql 请问如何将多个SELECT语句的结果合并到一个结果集中?

Mysql 请问如何将多个SELECT语句的结果合并到一个结果集中?,mysql,node.js,express,Mysql,Node.js,Express,下面给出了模式和各个select语句。 但是,我希望一次检索各种查询的所有结果。 我如果 //模式。。下面是db模式 CREATE TABLE `orgs` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `org_name` varchar(250) NOT NULL, UNIQUE (org_name) ) CREATE TABLE `orgs_relation` ( `org_id` int

下面给出了模式和各个select语句。 但是,我希望一次检索各种查询的所有结果。 我如果

//模式。。下面是db模式

CREATE TABLE `orgs` (

  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `org_name` varchar(250) NOT NULL,
  UNIQUE (org_name)
)



CREATE TABLE `orgs_relation` (

  `org_id` int(10) UNSIGNED NOT NULL,
  `parent_org_id` int(10) UNSIGNED NOT NULL,
  CONSTRAINT org_relation_pair UNIQUE (org_id, parent_org_id)
)


#// Get parents
SELECT parent_org_id, orgs.org_name as org_name, "parent" as parent FROM `orgs_relation`
JOIN orgs ON orgs_relation.parent_org_id = orgs.id
WHERE org_id = (SELECT id FROM orgs WHERE org_name='Black Banana')
ORDER BY org_name ASC

#// Get chidren
SELECT org_id, orgs.org_name as org_name, "children" as children FROM `orgs_relation`
JOIN orgs ON orgs_relation.org_id = orgs.id
WHERE parent_org_id = (SELECT id FROM orgs WHERE org_name='Black Banana')
ORDER BY org_name ASC

#// Get sisters
SELECT DISTINCT or2.org_id AS sister_id, org_name, "sisters" as sisters FROM `orgs_relation` AS or1
JOIN orgs_relation AS or2 ON or1.parent_org_id = or2.parent_org_id
JOIN orgs ON or2.org_id = orgs.id
WHERE or1.org_id = (SELECT id FROM orgs WHERE org_name='Black Banana')
ORDER BY org_name ASC
我目前正在使用下面的方法,但它不起作用:

app.get("/api/orgs/all/:id", function(req, res){
    var p = req.params.id;
    console.log(p);

var daughtersQuery = "SELECT org_id, orgs.org_name as org_name, 'daughters' as daughters FROM `orgs_relation` JOIN orgs ON orgs_relation.org_id = orgs.id  WHERE parent_org_id = (SELECT id FROM orgs WHERE org_name =  'Black Banana')";
var parentQuery = "SELECT parent_org_id, orgs.org_name as org_name, 'parent' as parent FROM `orgs_relation`JOIN orgs ON orgs_relation.parent_org_id = orgs.id WHERE org_id = (SELECT id FROM orgs WHERE org_name= 'Black Banana')";   
var sistersQuery = "SELECT DISTINCT or2.org_id AS sister_id, org_name, 'sisters' as sisters FROM `orgs_relation` AS or1 JOIN orgs_relation AS or2 ON or1.parent_org_id = or2.parent_org_id JOIN orgs ON or2.org_id = orgs.id WHERE or1.org_id = (SELECT id FROM orgs WHERE org_name= 'Black Banana')";

   var q = "SELECT DISTINCT id, org_name, org_id, parent_org_id from (" +
                        daughtersQuery + " UNION ALL " +
                        parentQuery + " UNION ALL " +
                        sistersQuery + " ) a ORDER ALL org_name asc";
      //  console.log(q);

         connection.query(q, function (error, results) {
              if (error) throw error;
          // console.log(results);
          res.send(results);
        });
});
我想你正在使用。国家:

出于安全原因,禁用了对多个语句的支持(it 如果值未正确转义,则允许SQL注入攻击)

多语句查询 要使用此功能,您必须为您的连接启用它:

var connection = mysql.createConnection({multipleStatements: true});
启用后,您可以使用多个语句执行查询,方法是使用分号分隔每个语句
。结果将是每个语句的一个数组

例子 你的回答
您可以使用UNION ALL,但只有在每个查询中有相同的列名时才可以使用。@jacobH如果我有不同的列名怎么办?我该怎么办呢?父母是亲戚
connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
  if (err) throw err;

  // `results` is an array with one element for every statement in the query:
  console.log(results[0]); // [{1: 1}]
  console.log(results[1]); // [{2: 2}]
});
var q = "SELECT org_id, orgs.org_name as org_name, 'daughters' as daughters FROM `orgs_relation` JOIN orgs ON orgs_relation.org_id = orgs.id  WHERE parent_org_id = (SELECT id FROM orgs WHERE org_name =  'Black Banana');SELECT parent_org_id, orgs.org_name as org_name, 'parent' as parent FROM `orgs_relation`JOIN orgs ON orgs_relation.parent_org_id = orgs.id WHERE org_id = (SELECT id FROM orgs WHERE org_name= 'Black Banana');SELECT DISTINCT or2.org_id AS sister_id, org_name, 'sisters' as sisters FROM `orgs_relation` AS or1 JOIN orgs_relation AS or2 ON or1.parent_org_id = or2.parent_org_id JOIN orgs ON or2.org_id = orgs.id WHERE or1.org_id = (SELECT id FROM orgs WHERE org_name= 'Black Banana')";

connection.query(q, function (error, results) {
  if (error) throw error;
  // console.log(results[0]);
  // console.log(results[1]);
  // console.log(results[2]);
  res.send(results);
});