gpt4 book ai didi

sql - 仅从多个表中选择同一列 WHERE something = something

转载 作者:行者123 更新时间:2023-12-04 04:53:27 26 4
gpt4 key购买 nike

我有两个结构非常相似的表。

Universidades
nombre | contenido | becas | fotos etc etc etc
Internados
nombre | todo | becas | fotos etc etc etc

我想编写一个 SQL 语句来选择 nombre并仅在匹配时将其作为数组返回。据我所见 UNION SELECT似乎是这样做的方法。我加了 WHERE最后,我认为这是出错的地方。到目前为止,我收到了第一张 table 的第一行。

我打错了什么?
$db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$data = $db->prepare("SELECT nombre FROM internados UNION SELECT nombre FROM universidades WHERE nombre = ?");
$data->execute(array($nombre));

抱歉,我想从这两个表中检索一个结果。在nombre中的名字两个表中的列都是单独的且不同的

最佳答案

在我们解决问题之前需要指出的一个问题是 UNION 中的每个查询是独特的,需要自己的 WHERE条款。唯一适用于 UNION 的条款整体是ORDER BY .所以你的查询需要一些调整:

SELECT nombre
FROM dbo.internados
WHERE nombre = ? -- the added line
UNION
SELECT nombre
FROM dbo.universidades
WHERE nombre = ?
;

其次,如果您希望两个表都具有相同的 nombre (这并不完全清楚,但我猜是对的),那么这将不起作用,因为它只是返回一个 nombre如果在任一表中找到该值。解决这个问题的最好方法可能是做一个连接:
SELECT I.nombre
FROM
dbo.internados I
INNER JOIN dbo.universidades U
ON I.nombre = U.nombre
WHERE
I.nombre = ?
AND U.nombre = ? -- perhaps not needed, but perhaps helpful
;

我不是 100% 确定我完全理解你在找什么,所以如果我错过了标记,请说出来。

你可以考虑 JOINUNION这边走:
  • JOIN : 水平连接行
  • 在条件下匹配它们
  • 创建新列
  • 不完全创建行,因为所有数据都来自现有行,但当条件匹配另一个输入中的多行时,它将从一个输入复制一行。如果两个输入都有重复,那么它将一个输入的行数乘以另一个输入的匹配行数。
  • 如果根本没有匹配条件(想想 CROSS JOIN ),那么您可以获得笛卡尔积,它是一个输入中的每一行与另一个输入中的每一行匹配。
  • 使用 OUTER 时加盟-- LEFT , RIGHT , FULL --如果来自内部输入(或带有 FULL 的输入)的行与另一个不匹配, NULL s 将被放置到其他输入的列中。
  • UNION : 垂直堆叠行
  • 通常,创建新行
  • 不使用条件,没有真正匹配
  • UNION本身(不是 UNION ALL )将删除重复的行,即使一个输入没有行

  • 请注意 UNION可以修改以完成这项工作,尽管这并不理想:
    SELECT nombre
    FROM (
    SELECT nombre
    FROM dbo.internados
    WHERE nombre = ?
    UNION ALL
    SELECT nombre
    FROM dbo.universidades
    WHERE nombre = ?
    ) N
    GROUP BY nombre
    HAVING Count(*) = 2
    ;

    通过这种方式,我们确保有两个值。请注意,这假定每个表中不能有两个相同的名称。如果这是真的,需要做更多的工作来制作 UNION方法做的工作。

    关于sql - 仅从多个表中选择同一列 WHERE something = something,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092697/

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