2009-02-06 5 views
2

J'essaie de créer une vue pour une UNION de 2 instructions select que j'ai créées.MySql: UNION n'est pas exécuté lorsqu'il est exécuté en tant que vue

L'UNION fonctionne bien lorsqu'il est exécuté individuellement

Mais le problème est que la 1ère partie de l'Union est exécuté quand je se suis exécutais comme une vue.

La requête J'utilise est comme ci-dessous

SELECT DISTINCT products.pid AS id, 
       products.pname AS name, 
       products.p_desc AS description, 
       products.p_uid AS userid, 
       products.p_loc AS location, 
       products.isaproduct AS whatisit 
      FROM products 
UNION 

SELECT DISTINCT services.s_id AS id, 
       services.s_name AS name, 
       services.s_desc AS description, 
       services.s_uid AS userid, 
       services.s_location AS location, 
       services.isaservice AS whatisit 
      FROM services 
      WHERE services.s_name 

Les travaux ci-dessus bien quand je l'exécute séparément. Mais quand je l'utilise comme vue, cela ne me donne pas les résultats de la partie services.

Quelqu'un pourrait-il m'aider s'il vous plaît?

+0

dupliquer: http://stackoverflow.com/questions/514817/creating-mysql-view-using-union/514823#514823 – Learning

+0

Comment ces tables sont-elles liées les unes aux autres? –

+0

J'ai un problème similaire. Si je supprime une ligne de la table 'products', il reste SELECTing sur la vue, mais pas lors de l'exécution de l'UNION seule ...: S –

Répondre

0

Je pense que votre champs userid et l'emplacement sont permutés dans les deux sélections de l'union, si de différents types de données, vous obtiendrez une erreur, sinon, vous obtiendrez mauvais résultats ... est-ce cela?

+0

Voilà comment j'utilisais mais j'ai fait une erreur en entrant ici .. Toujours pas fonctionnant –

0

Si vous pouviez donner l'ensemble de résultats pour chaque requête individuelle ci-dessus et ensuite donner le jeu de résultats pour la requête UNION, nous pourrions probablement fournir une meilleure réponse à votre question. Mon intuition est que la deuxième requête peut retourner une valeur en double, et puisque vous utilisez UNION, les doublons sont supprimés. Si vous avez utilisé UNION ALL, toutes les lignes dupliquées seront renvoyées. Par exemple, si la première requête a retourné la ligne:

1 name1 description1 10 Home Y 
2 name2 description2 20 Work Y 

et la deuxième ligne retournée:

1 name1 description1 10 Home Y 

La sortie résultante serait:

1 name1 description1 10 Home Y 
2 name2 description2 20 Work Y 

Si vous voulez tous les lignes retournées:

1 name1 description1 10 Home Y 
2 name2 description2 20 Work Y 
1 name1 description1 10 Home Y 

Ensuite, vous utiliseriez un ALL UNION au lieu d'une instruction UNION.

Questions connexes