【发布时间】:2021-08-16 15:47:36
【问题描述】:
一个结构化查询中有两个表,如下所示
SELECT "field"
UNION SELECT "<category_id>"
UNION SELECT category_id FROM categories
UNION SELECT "</category_id>"
UNION SELECT "<inventory_id>"
UNION SELECT inventory_id FROM inventories
UNION SELECT "</inventory_id>"
UNION SELECT "<inventory_name>"
UNION SELECT inventory_name FROM inventories
UNION SELECT "</inventory_name>"
UNION SELECT "<category_name>"
UNION SELECT category_name FROM categories
UNION SELECT "</category_name>"
查询结果:
| field |
|---|
| field |
| category_id |
| 1 |
| 2 |
| 3 |
| category_id |
| inventory_id |
| inventory_id |
| inventory_name |
| inv1 |
| inv2 |
| inv3 |
| inventory_name |
| category_name |
| cate1 |
| cate2 |
| cate3 |
| category_name |
<inventory_id></inventory_id> 应包含 1,即 inventory.inventory_id 记录
通知
当我在查询中将<inventory_id></inventory_id> 移动到<category_id></category_id> 时
我在<inventory_id></inventory_id> 中得到了预期的结果,但<category_id></category_id> 是空的
用于模拟的表结构
create table inventories(inventory_id int AUTO_INCREMENT, inventory_name varchar(255), PRIMARY key (inventory_id));
create table categories(category_id int AUTO_INCREMENT, category_name varchar(255), PRIMARY key (category_id));
INSERT INTO categories(category_name) VALUES("cate1"),("cate2"),("cate3");
INSERT INTO inventories(inventory_name) VALUES("inv1"),("inv2"),("inv3");
使用顶部选择查询获取结果
我使用https://sqliteonline.com/ 用phpmyadmin 模拟它并得到相同的结果
【问题讨论】:
-
你真的要
field出现在查询结果中,还是应该是列名? -
main和Uncategories在您的输出中来自哪里?示例类别名称为cate1、cate2和cate3。 -
您的结果中的
<、/和>在哪里? -
@Barmar 缺少的尖括号可能只是被浏览器隐藏了。我会更担心结果更改的顺序,因为 SQL 将不保证记录按列出的顺序返回。它可能似乎会以这种方式返回,但随后您将其移至生产服务器,突然其中一张表中的
SELECT被延迟以利用现有索引遍历。 -
这应该是生成 XML 吗?如果是这样,每个项目不应该被包装在自己的标签中,而不是每个列表周围的标签吗?