2014-06-12 6 views
0

J'ai 3 tables (c19, c19b2, g26) dans une base de donnéesrequête SQL pour la sélection de plusieurs tables dans la base de données unique

Je veux écrire une requête SQL pour rechercher et afficher tous les champs de l'enregistrement correspondant.

J'utilise la requête suivante:

$query = "SELECT * FROM c19,c19b2,g26 WHERE armyno LIKE '%$searchTerm%'"; 

Mais il ne fonctionne que pour la table c19, données des 2 autres tables n'est pas la table fetched.Each a un champ armyno

S'il vous plaît me aider ce Merci.

+0

S'il vous plaît modifier votre question avec des exemples de données et ce que vous souhaitez que les résultats soient. –

+0

Il est possible que votre conception de schéma puisse être améliorée. – Strawberry

Répondre

0

Quelle base de données utilisez-vous? Cela aurait fonctionné dans SQL Server. Cependant, notez que vous faites une jointure croisée de tous les records à chaque enregistrement ... habituellement vous ne souhaitez que faire correspondre des enregistrements par restriction d'une clé correspondante, par exemple:

select 
    * 
from a 
left join b on b.somekey = a.somekey 
left join c on c.someotherkey = b.someotherkey 

Dans SQL Server, vous pouvez simplement dire *, mais je suppose que dans votre moteur de base de données qui ne fonctionne pas, essayez de spécifier quelle table. Cela peut dans certains environnements nécessitent aliasing ainsi:

select 
    a.*, 
    b.*, 
    c.* 
from tableA as a 
left join tableB as b on b.somekey = a.somekey 
left join tableC as c on c.someotherkey = b.someotherkey 

En général, vous devriez voir les colonnes de la première table, puis les colonnes de la deuxième table, suivi par des colonnes de la troisième table pour une ligne donnée. Si vous vouliez obtenir toutes les colonnes de toutes les tables, mais séparément, il s'agirait de 3 sélections distinctes. Enfin, si toutes les 3 tables ont "armyno" alors je m'attendrais à ce qu'il lance une erreur de champ ambiguë. Dans ce cas, vous devez spécifier le champ "armyno" de la table sur lequel filtrer.

+0

Merci pour l'idée de 3 questions séparées SELECT :) Cela a fonctionné –

1

D'accord, vous ne cherchez pas un JOIN, mais un UNION.

SELECT * FROM c19 WHERE armyno LIKE '%$searchTerm%' 
UNION 
SELECT * FROM c19b2 WHERE armyno LIKE '%$searchTerm%' 
UNION 
SELECT * FROM g26 WHERE armyno LIKE '%$searchTerm%' 

Cela vous permettra d'interroger les trois tables en même temps.

+0

Merci Cela fonctionne aussi :) –

Questions connexes