sql – 仅从多个表中选择相同的列什么东西=某事
我有两个结构非常相似的表.
Universidades nombre | contenido | becas | fotos etc etc etc Internados nombre | todo | becas | fotos etc etc etc 我想编写一个SQL语句,它将从它们中选择nombre并仅在匹配时将其作为数组返回.从我所看到的UNION SELECT似乎是这样做的方式.我最后添加了WHERE,我认为这是它出错的地方.到目前为止,我收到了第一张表的第一行. 我打错了什么? $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%确定我完全理解你在寻找什么,所以如果我错过了标记,请大声说出来. 您可以这样考虑JOIN和UNION: > JOIN:水平连接行 >在条件下匹配它们 > UNION:垂直堆叠行 >通常,创建新行 请注意,可以修改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方法完成工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |