gpt4 book ai didi

php - 如何在单个查询中使用通用Where子句进行多重选择?

转载 作者:行者123 更新时间:2023-11-29 12:32:54 25 4
gpt4 key购买 nike

如何为 1 个以上表中的所有值创建单个查询,其中县等于“baawa”。我正在使用 PHP 连接到数据库。

我尝试过的:

    SELECT (                
SELECT * FROM health WHERE county='baawa'
),
(
SELECT * FROM hotspots WHERE county='baawa'
),
(
SELECT * FROM markets WHERE county='baawa'
),
(
SELECT * FROM schools WHERE county='baawa'
),
(
SELECT * FROM security WHERE county='baawa'
)

编辑:表格具有不同的列数。

表格列:

健康设施_id,姓名,病房,地点,纬度,隆,职员,员工类别,结构,紧急情况,冲突案例,通讯设施,功率

<小时/>

热点姓名,纬度,隆,病房,地点,管理委员会,安全,类型

<小时/>

市场市场_id,姓名,病房,地点,纬度,隆,管理委员会,安全性

<小时/>

学校全文,学校_id,姓名,等级,病房,地点,纬度,隆,学生,工作人员_号,和平俱乐部,受冲突影响

<小时/>

安全性安全_id,姓名,病房,地点,纬度,隆,职员,结构,运输,沟通,力量,犯罪,决议

最佳答案

由于 SQL 查询返回二维行集,因此输出必须具有一致的列集。因此,不可能向多个明显不同的表发出一个查询,并生成包含所有相关表的所有列的输出参见脚注。如果您希望所有列都可用,例如 SELECT * 将产生,您将需要发出 5 个单独的查询并从各个列中获取行。

可以利用现有结构做什么:

利用现有的结构,要获得所有这些相同的组合行集,您需要 chain them together with UNION ALL使用模式:

SELECT col1, col2 FROM health WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM hotspots WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM markets WHERE county = 'baawa'
UNION ALL....
SELECT col1, col2 FROM schools WHERE county = 'baawa'
UNION ALL
SELECT col1, col2 FROM security WHERE county = 'baawa'
/* ORDER BY applies to the whole rowset */
ORDER BY col2 DESC, col1 ASC

问题是,您只能以我在这里所做的简单方式使用此方法来获取所有表共有的列。查看您的表结构,我看到的常见列是名称、病房、位置、纬度、经度。因此,您必须在每个 UNION 组件的 SELECT 中以相同的顺序列出它们。

请注意,我没有UNION 查询中使用SELECT *。除非表完全相同,并且最初以完全相同的顺序定义列,否则 SELECT * 不会以相同的顺序生成列,并且您的输出将不会没有意义,因为它们没有在 UNION 的表之间对齐。

执行 UNION 查询时,明确 SELECT 列表中列的顺序非常重要。就您而言,无论如何这是不可能的,因为表格差异很大。

如果您需要在结果查询中包含并非所有表都通用的一两个其他列,您可以SELECT列表中通过添加列不存在的 UNION 组件中的 NULL。例如,mgt_committee 列表示存在的 2,而 NULL 表示不存在的列:

/* NULL as mgt_committee where column doesn't exist in table... */
SELECT col1, col2, NULL AS mgt_committee FROM health WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, mgt_committee FROM hotspots WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, mgt_committee FROM markets WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, NULL AS mgt_committee FROM schools WHERE county = 'baawa'
UNION ALL
SELECT col1, col2, NULL AS mgt_committee FROM security WHERE county = 'baawa'
<小时/>

脚注:

将所有表中的所有列包含在一个 SELECT 中的唯一方法是列出所有列的超集,就像我对 mgt_committee 所做的那样,这意味着所有表中的所有列必须在 UNION每个组件中表示,并用 NULL 替换不存在的列。不要这样做,这没有意义。

关于php - 如何在单个查询中使用通用Where子句进行多重选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com