MYSQL si une requête select renvoie 0 lignes puis une autre requête select?
si select * from table where x=1
retourne 0 lignes, puis j'ai besoin de select * from table where x=2 [or some other query]
. Est-il possible de le faire en une seule requête MySQL avec une instruction conditionnelle?
Edit: Toutes les réponses avec UNION
travail, mais seulement si les deux requêtes select à partir de la même table (ou des tables avec le même nombre de colonnes). Que faire si la deuxième requête est appliquée sur une autre table avec des jointures?
Laissez-moi écrire mes requêtes à faire de la question plus clairement:
1er:
SELECT table1.a, table2.b from table1 LEFT JOIN table2 ON table2.x= table1.x
WHERE .....
si le résultat de la 1er est null alors:
2e:
SELECT table1.a FROM table1
WHERE ....
Je vais être en utilisant les lignes de la 1ère requête si elle renvoie tout, sinon le 2ème sera utilisé.
source d'informationauteur emre
Vous devez vous connecter pour publier un commentaire.
Cela semble fonctionner à partir d'un rapide test, j'ai juste fait et évite la nécessité de vérifier l'existence de
x=1
deux fois.Edit: Suite à vos éclaircissement de la question, évidemment, de l'2 requêtes devront être de l'UNION compatible pour le ci-dessus pour travailler.
La réponse à la mise à jour de votre question est Non. Ce n'est pas possible en une seule requête. Vous devez utiliser certains conditionnel logique procédurale pour exécuter la requête souhaitée.
Vous pourriez essayer...
si vous ne considérez pas trop horrible d'un hack.
oui
Sous-requêtes avec EXISTE ou n'EXISTE PAS
http://dev.mysql.com/doc/refman/5.1/en/exists-and-not-exists-subqueries.html
exemple :
Si les deux requêtes retournent nombre différent de colonnes, vous pouvez remplir un des résultats avec des colonnes vides et également ajouter une colonne d'identification en premier.
Où mytable2 a 4 plus de colonnes que mytable.
L'explication la plus simple est que:
If donner quelques fonctionnalités aux valeurs sélectionnées.
La structure est quelque chose comme ceci:
Une grande explication peut être trouvée ici.
SQL_CALC_FOUND_ROWS
etFOUND_ROWS
ne peut pas être utilisé en une seule requête, même s'ils sont séparés parUNION
consolidés.La bonne façon de le faire serait:
Avec le
JOIN
et laUNION ALL
les performances de cette requête est presque équivalent, soit de l'individu autonome requêtesvous pouvez utiliser EXISTER et ne PAS EXISTER instruction pour vérifier que le résultat est null ou pas. si le résultat est Null, alors vous pouvez obtenir la valeur de table2.