14

非常によく似た構造のテーブルが 2 つあります。

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

nombre両方から選択し、一致した場合にのみ配列として返すSQL ステートメントを作成したいと考えています。私が見た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));

申し訳ありませんが、これら 2 つのテーブルから 1 つの結果を取得したいと思います。列の名前nombreはすべて個別であり、両方の表で異なります

4

2 に答える 2

6

ほとんどのunion場合、結合を行うことで実現できます。

SELECT nombre 
  FROM internados 
UNION 
SELECT nombre 
  FROM universidades 
 WHERE nombre = ?

より良いでしょう:

SELECT nombre
  FROM internados i
  JOIN universidades u
    ON i.nombre = u.nombre
   AND nombre = ?

これは読みやすいです。(構文を使用することもできJOINますが、私は単純な古い手動結合を好みます)。

ただし、これが aunionまたは a のjoinいずれであっても、両方のテーブルが結果にマージされることに常に注意してください。

nombre | todo | becas | fotos | ... | contenido | becas | ...

基本的に、nombre に条件を設定すると、空のセットを取得するか、クエリに指定した名前を取得します。しかし、共用体を記述した方法whereでは、最初のセットではなく、2 番目のセットのみが条件を適用されます。ユニオンの両方のクエリに条件を設定する必要があります。

SELECT nombre 
  FROM internados 
 WHERE nombre = ?
UNION 
SELECT nombre 
  FROM universidades 
 WHERE nombre = ?
于 2013-06-13T16:54:18.967 に答える