Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PB avec UNION

9 réponses
Avatar
[Bruno]
Bonjour a tous,



En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on déjà
apporter.



Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
l'autre ; mais ça ne marche plus si je fait une UNION !

(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)





Voici le message d'erreur que j'obtiens :

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données text,
ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.







Ma requête :



SELECT 1 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref =
annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND (aa002_annonceur_mproduit.aa002_parution_actif =
1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal = 75017)



UNION



SELECT 2 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON
mproduit.mproduit_annonceur_ref = annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND (aa002_annonceur_mproduit.aa002_parution_actif =
1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal <>
75017)



ORDER BY tri

9 réponses

Avatar
Fred BROUARD
1) utilises des alias

2) évite les parenthèses inutiles

3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
court appelle un DISTINCT implicite...


SELECT 1 AS tri,
A.annonceur_raisonsocial_publique,
A.annonceur_adresse_distribution,
A.annonceur_adresse_voie_n,
A.annonceur_adresse_voie_nom,
A.annonceur_adresse_codepostal,
A.annonceur_adresse_localite_nom,
A.annonceur_photo1_actif,
A.annonceur_photo1,
A.annonceur_phone1_type,
A.annonceur_estara,
A.annonceur_phone1,
A.annonceur_phone2_type,
A.annonceur_phone2,
A.annonceur_phone3_type,
A.annonceur_phone3,
A.annonceur_phone4_type,
A.annonceur_phone4,
A.annonceur_phone5_type,
A.annonceur_phone5,
M.mproduit_index,
M.mproduit_motcle,
M.mproduit_nom,
M.mproduit_resume,
M.mproduit_photo1,
M.mproduit_photo1_actif,
M.mproduit_prix_type,
M.mproduit_prix,
M.mproduit_prix_info

FROM mproduit M
INNER JOIN annonceur A
ON M.mproduit_annonceur_ref = A.annonceur_index
INNER JOIN aa002_annonceur_mproduit AM
ON A.annonceur_index = AM.aa002_annonceur_ref

WHERE M.mproduit_actif = 1
AND A.annonceur_actif = 1
AND A.annonceur_mbase_actif = 1
AND M.mproduit_web_actif = 1
AND AM.aa002_actif = 1
AND AM.aa002_parution_actif = 1
AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND M.mproduit_type = 0
AND A.annonceur_type = 2
AND M.mproduit_prix_type > 0
AND AM.aa002_localite_codepostal = 75017
AND A.annonceur_adresse_codepostal = 75017

UNION ALL

SELECT 2 AS tri,
AA.annonceur_raisonsocial_publique,
AA.annonceur_adresse_distribution,
AA.annonceur_adresse_voie_n,
AA.annonceur_adresse_voie_nom,
AA.annonceur_adresse_codepostal,
AA.annonceur_adresse_localite_nom,
AA.annonceur_photo1_actif,
AA.annonceur_photo1,
AA.annonceur_phone1_type,
AA.annonceur_estara,
AA.annonceur_phone1,
AA.annonceur_phone2_type,
AA.annonceur_phone2,
AA.annonceur_phone3_type,
AA.annonceur_phone3,
AA.annonceur_phone4_type,
AA.annonceur_phone4,
AA.annonceur_phone5_type,
AA.annonceur_phone5,
MM.mproduit_index,
MM.mproduit_motcle,
MM.mproduit_nom,
MM.mproduit_resume,
MM.mproduit_photo1,
MM.mproduit_photo1_actif,
MM.mproduit_prix_type,
MM.mproduit_prix,
MM.mproduit_prix_info

FROM mproduit
INNER JOIN annonceur AA
ON MM.mproduit_annonceur_ref = AA.annonceur_index

INNER JOIN aa002_annonceur_mproduit AAM
ON AA.annonceur_index = AAM.aa002_annonceur_ref

WHERE MM.mproduit_actif = 1
AND AA.annonceur_actif = 1
AND AA.annonceur_mbase_actif = 1
AND MM.mproduit_web_actif = 1
AND AAM.aa002_actif = 1
AND AAM.aa002_parution_actif = 1
AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND MM.mproduit_type = 0
AND AA.annonceur_type = 2
AND MM.mproduit_prix_type > 0
AND AAM.aa002_localite_codepostal = 75017
AND AA.annonceur_adresse_codepostal <> 75017

ORDER BY tri

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************

[Bruno] a écrit:
Bonjour a tous,



En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on déjà
apporter.



Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
l'autre ; mais ça ne marche plus si je fait une UNION !

(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)





Voici le message d'erreur que j'obtiens :

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données text,
ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.







Ma requête :



SELECT 1 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref > annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND (aa002_annonceur_mproduit.aa002_parution_actif > 1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal = 75017)



UNION



SELECT 2 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON
mproduit.mproduit_annonceur_ref = annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND (aa002_annonceur_mproduit.aa002_parution_actif > 1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal <>
75017)



ORDER BY tri






Avatar
Fred BROUARD
1) utilises des alias

2) évite les parenthèses inutiles

3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
court appelle un DISTINCT implicite...


SELECT 1 AS tri,
A.annonceur_raisonsocial_publique,
A.annonceur_adresse_distribution,
A.annonceur_adresse_voie_n,
A.annonceur_adresse_voie_nom,
A.annonceur_adresse_codepostal,
A.annonceur_adresse_localite_nom,
A.annonceur_photo1_actif,
A.annonceur_photo1,
A.annonceur_phone1_type,
A.annonceur_estara,
A.annonceur_phone1,
A.annonceur_phone2_type,
A.annonceur_phone2,
A.annonceur_phone3_type,
A.annonceur_phone3,
A.annonceur_phone4_type,
A.annonceur_phone4,
A.annonceur_phone5_type,
A.annonceur_phone5,
M.mproduit_index,
M.mproduit_motcle,
M.mproduit_nom,
M.mproduit_resume,
M.mproduit_photo1,
M.mproduit_photo1_actif,
M.mproduit_prix_type,
M.mproduit_prix,
M.mproduit_prix_info

FROM mproduit M
INNER JOIN annonceur A
ON M.mproduit_annonceur_ref = A.annonceur_index
INNER JOIN aa002_annonceur_mproduit AM
ON A.annonceur_index = AM.aa002_annonceur_ref

WHERE M.mproduit_actif = 1
AND A.annonceur_actif = 1
AND A.annonceur_mbase_actif = 1
AND M.mproduit_web_actif = 1
AND AM.aa002_actif = 1
AND AM.aa002_parution_actif = 1
AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND M.mproduit_type = 0
AND A.annonceur_type = 2
AND M.mproduit_prix_type > 0
AND AM.aa002_localite_codepostal = 75017
AND A.annonceur_adresse_codepostal = 75017

UNION ALL

SELECT 2 AS tri,
AA.annonceur_raisonsocial_publique,
AA.annonceur_adresse_distribution,
AA.annonceur_adresse_voie_n,
AA.annonceur_adresse_voie_nom,
AA.annonceur_adresse_codepostal,
AA.annonceur_adresse_localite_nom,
AA.annonceur_photo1_actif,
AA.annonceur_photo1,
AA.annonceur_phone1_type,
AA.annonceur_estara,
AA.annonceur_phone1,
AA.annonceur_phone2_type,
AA.annonceur_phone2,
AA.annonceur_phone3_type,
AA.annonceur_phone3,
AA.annonceur_phone4_type,
AA.annonceur_phone4,
AA.annonceur_phone5_type,
AA.annonceur_phone5,
MM.mproduit_index,
MM.mproduit_motcle,
MM.mproduit_nom,
MM.mproduit_resume,
MM.mproduit_photo1,
MM.mproduit_photo1_actif,
MM.mproduit_prix_type,
MM.mproduit_prix,
MM.mproduit_prix_info

FROM mproduit
INNER JOIN annonceur AA
ON MM.mproduit_annonceur_ref = AA.annonceur_index

INNER JOIN aa002_annonceur_mproduit AAM
ON AA.annonceur_index = AAM.aa002_annonceur_ref

WHERE MM.mproduit_actif = 1
AND AA.annonceur_actif = 1
AND AA.annonceur_mbase_actif = 1
AND MM.mproduit_web_actif = 1
AND AAM.aa002_actif = 1
AND AAM.aa002_parution_actif = 1
AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND MM.mproduit_type = 0
AND AA.annonceur_type = 2
AND MM.mproduit_prix_type > 0
AND AAM.aa002_localite_codepostal = 75017
AND AA.annonceur_adresse_codepostal <> 75017

ORDER BY tri

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************

[Bruno] a écrit:
Bonjour a tous,



En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on déjà
apporter.



Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
l'autre ; mais ça ne marche plus si je fait une UNION !

(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)





Voici le message d'erreur que j'obtiens :

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données text,
ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.







Ma requête :



SELECT 1 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref > annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND (aa002_annonceur_mproduit.aa002_parution_actif > 1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal = 75017)



UNION



SELECT 2 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON
mproduit.mproduit_annonceur_ref = annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND (aa002_annonceur_mproduit.aa002_parution_actif > 1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal <>
75017)



ORDER BY tri






Avatar
[Bruno]
YES !!!

En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.



Par contre pourquoi utiliser des ALIAS ?



Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?



Etant un heureux possesseur de ton livre, tu peux y faire référence.



Bruno




"Fred BROUARD" a écrit dans le message de news:

1) utilises des alias

2) évite les parenthèses inutiles

3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
court appelle un DISTINCT implicite...


SELECT 1 AS tri,
A.annonceur_raisonsocial_publique,
A.annonceur_adresse_distribution,
A.annonceur_adresse_voie_n,
A.annonceur_adresse_voie_nom,
A.annonceur_adresse_codepostal,
A.annonceur_adresse_localite_nom,
A.annonceur_photo1_actif,
A.annonceur_photo1,
A.annonceur_phone1_type,
A.annonceur_estara,
A.annonceur_phone1,
A.annonceur_phone2_type,
A.annonceur_phone2,
A.annonceur_phone3_type,
A.annonceur_phone3,
A.annonceur_phone4_type,
A.annonceur_phone4,
A.annonceur_phone5_type,
A.annonceur_phone5,
M.mproduit_index,
M.mproduit_motcle,
M.mproduit_nom,
M.mproduit_resume,
M.mproduit_photo1,
M.mproduit_photo1_actif,
M.mproduit_prix_type,
M.mproduit_prix,
M.mproduit_prix_info

FROM mproduit M
INNER JOIN annonceur A
ON M.mproduit_annonceur_ref = A.annonceur_index
INNER JOIN aa002_annonceur_mproduit AM
ON A.annonceur_index = AM.aa002_annonceur_ref

WHERE M.mproduit_actif = 1
AND A.annonceur_actif = 1
AND A.annonceur_mbase_actif = 1
AND M.mproduit_web_actif = 1
AND AM.aa002_actif = 1
AND AM.aa002_parution_actif = 1
AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND M.mproduit_type = 0
AND A.annonceur_type = 2
AND M.mproduit_prix_type > 0
AND AM.aa002_localite_codepostal = 75017
AND A.annonceur_adresse_codepostal = 75017

UNION ALL

SELECT 2 AS tri,
AA.annonceur_raisonsocial_publique,
AA.annonceur_adresse_distribution,
AA.annonceur_adresse_voie_n,
AA.annonceur_adresse_voie_nom,
AA.annonceur_adresse_codepostal,
AA.annonceur_adresse_localite_nom,
AA.annonceur_photo1_actif,
AA.annonceur_photo1,
AA.annonceur_phone1_type,
AA.annonceur_estara,
AA.annonceur_phone1,
AA.annonceur_phone2_type,
AA.annonceur_phone2,
AA.annonceur_phone3_type,
AA.annonceur_phone3,
AA.annonceur_phone4_type,
AA.annonceur_phone4,
AA.annonceur_phone5_type,
AA.annonceur_phone5,
MM.mproduit_index,
MM.mproduit_motcle,
MM.mproduit_nom,
MM.mproduit_resume,
MM.mproduit_photo1,
MM.mproduit_photo1_actif,
MM.mproduit_prix_type,
MM.mproduit_prix,
MM.mproduit_prix_info

FROM mproduit
INNER JOIN annonceur AA
ON MM.mproduit_annonceur_ref = AA.annonceur_index

INNER JOIN aa002_annonceur_mproduit AAM
ON AA.annonceur_index = AAM.aa002_annonceur_ref

WHERE MM.mproduit_actif = 1
AND AA.annonceur_actif = 1
AND AA.annonceur_mbase_actif = 1
AND MM.mproduit_web_actif = 1
AND AAM.aa002_actif = 1
AND AAM.aa002_parution_actif = 1
AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND MM.mproduit_type = 0
AND AA.annonceur_type = 2
AND MM.mproduit_prix_type > 0
AND AAM.aa002_localite_codepostal = 75017
AND AA.annonceur_adresse_codepostal <> 75017

ORDER BY tri

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************

[Bruno] a écrit:
> Bonjour a tous,
>
>
>
> En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on


déjà
> apporter.
>
>
>
> Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
> l'autre ; mais ça ne marche plus si je fait une UNION !
>
> (Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)
>
>
>
>
>
> Voici le message d'erreur que j'obtiens :
>
> ODBC Error Code = 37000 (Syntax error or access violation)
>
> [Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données text,
> ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.
>
>
>
>
>
>
>
> Ma requête :
>
>
>
> SELECT 1 AS tri,
>
> annonceur.annonceur_raisonsocial_publique,
>
> annonceur.annonceur_adresse_distribution,
>
> annonceur.annonceur_adresse_voie_n,
>
> annonceur.annonceur_adresse_voie_nom,
>
> annonceur.annonceur_adresse_codepostal,
>
> annonceur.annonceur_adresse_localite_nom,
>
> annonceur.annonceur_photo1_actif,
>
> annonceur.annonceur_photo1,
>
> annonceur.annonceur_phone1_type,
>
> annonceur.annonceur_estara,
>
> annonceur.annonceur_phone1,
>
> annonceur.annonceur_phone2_type,
>
> annonceur.annonceur_phone2,
>
> annonceur.annonceur_phone3_type,
>
> annonceur.annonceur_phone3,
>
> annonceur.annonceur_phone4_type,
>
> annonceur.annonceur_phone4,
>
> annonceur.annonceur_phone5_type,
>
> annonceur.annonceur_phone5,
>
> mproduit.mproduit_index,
>
> mproduit.mproduit_motcle,
>
> mproduit.mproduit_nom,
>
> mproduit.mproduit_resume,
>
> mproduit.mproduit_photo1,
>
> mproduit.mproduit_photo1_actif,
>
> mproduit.mproduit_prix_type,
>
> mproduit.mproduit_prix,
>
> mproduit.mproduit_prix_info
>
> FROM mproduit
>
> INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref > > annonceur.annonceur_index
>
> INNER JOIN aa002_annonceur_mproduit ON
> annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref
>
> WHERE (mproduit.mproduit_actif = 1)
>
> AND (annonceur.annonceur_actif = 1)
>
> AND (annonceur.annonceur_mbase_actif = 1)
>
> AND (mproduit.mproduit_web_actif = 1)
>
> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>
> AND


(aa002_annonceur_mproduit.aa002_parution_actif > > 1)
>
> AND
> (aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>
> AND
> (aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>
> AND (mproduit.mproduit_type = 0)
>
> AND (annonceur.annonceur_type = 2)
>
> AND (mproduit.mproduit_prix_type > 0)
>
> AND
> (aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>
> AND (annonceur.annonceur_adresse_codepostal 75017)
>
>
>
> UNION
>
>
>
> SELECT 2 AS tri,
>
> annonceur.annonceur_raisonsocial_publique,
>
> annonceur.annonceur_adresse_distribution,
>
> annonceur.annonceur_adresse_voie_n,
>
> annonceur.annonceur_adresse_voie_nom,
>
> annonceur.annonceur_adresse_codepostal,
>
> annonceur.annonceur_adresse_localite_nom,
>
> annonceur.annonceur_photo1_actif,
>
> annonceur.annonceur_photo1,
>
> annonceur.annonceur_phone1_type,
>
> annonceur.annonceur_estara,
>
> annonceur.annonceur_phone1,
>
> annonceur.annonceur_phone2_type,
>
> annonceur.annonceur_phone2,
>
> annonceur.annonceur_phone3_type,
>
> annonceur.annonceur_phone3,
>
> annonceur.annonceur_phone4_type,
>
> annonceur.annonceur_phone4,
>
> annonceur.annonceur_phone5_type,
>
> annonceur.annonceur_phone5,
>
> mproduit.mproduit_index,
>
> mproduit.mproduit_motcle,
>
> mproduit.mproduit_nom,
>
> mproduit.mproduit_resume,
>
> mproduit.mproduit_photo1,
>
> mproduit.mproduit_photo1_actif,
>
> mproduit.mproduit_prix_type,
>
> mproduit.mproduit_prix,
>
> mproduit.mproduit_prix_info
>
> FROM mproduit
>
> INNER JOIN annonceur ON
> mproduit.mproduit_annonceur_ref = annonceur.annonceur_index
>
> INNER JOIN aa002_annonceur_mproduit ON
> annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref
>
> WHERE (mproduit.mproduit_actif = 1)
>
> AND (annonceur.annonceur_actif = 1)
>
> AND (annonceur.annonceur_mbase_actif = 1)
>
> AND (mproduit.mproduit_web_actif = 1)
>
> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>
> AND


(aa002_annonceur_mproduit.aa002_parution_actif > > 1)
>
> AND
> (aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>
> AND
> (aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>
> AND (mproduit.mproduit_type = 0)
>
> AND (annonceur.annonceur_type = 2)
>
> AND (mproduit.mproduit_prix_type > 0)
>
> AND
> (aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>
> AND (annonceur.annonceur_adresse_codepostal <>
> 75017)
>
>
>
> ORDER BY tri
>
>
>
>



Avatar
Fred BROUARD
Les alias allègent l'écriture et le rende plus lisible. De plus une
requête est un texte. Plus il est court, moins on utilise le processeur,
donc tu gagnera quelques infimes millisecondes...

CURRENT_TIMESTAMP est la fonction normative SQL 2
GetDate() est spécifique à SQL Server.
En utilisant systématiquement des commandes normatives tu devient plus
facilement portable. Cela ne coute pas plus cher !

A +



[Bruno] a écrit:
YES !!!

En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.



Par contre pourquoi utiliser des ALIAS ?



Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?



Etant un heureux possesseur de ton livre, tu peux y faire référence.



Bruno




"Fred BROUARD" a écrit dans le message de news:


1) utilises des alias

2) évite les parenthèses inutiles

3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
court appelle un DISTINCT implicite...


SELECT 1 AS tri,
A.annonceur_raisonsocial_publique,
A.annonceur_adresse_distribution,
A.annonceur_adresse_voie_n,
A.annonceur_adresse_voie_nom,
A.annonceur_adresse_codepostal,
A.annonceur_adresse_localite_nom,
A.annonceur_photo1_actif,
A.annonceur_photo1,
A.annonceur_phone1_type,
A.annonceur_estara,
A.annonceur_phone1,
A.annonceur_phone2_type,
A.annonceur_phone2,
A.annonceur_phone3_type,
A.annonceur_phone3,
A.annonceur_phone4_type,
A.annonceur_phone4,
A.annonceur_phone5_type,
A.annonceur_phone5,
M.mproduit_index,
M.mproduit_motcle,
M.mproduit_nom,
M.mproduit_resume,
M.mproduit_photo1,
M.mproduit_photo1_actif,
M.mproduit_prix_type,
M.mproduit_prix,
M.mproduit_prix_info

FROM mproduit M
INNER JOIN annonceur A
ON M.mproduit_annonceur_ref = A.annonceur_index
INNER JOIN aa002_annonceur_mproduit AM
ON A.annonceur_index = AM.aa002_annonceur_ref

WHERE M.mproduit_actif = 1
AND A.annonceur_actif = 1
AND A.annonceur_mbase_actif = 1
AND M.mproduit_web_actif = 1
AND AM.aa002_actif = 1
AND AM.aa002_parution_actif = 1
AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND M.mproduit_type = 0
AND A.annonceur_type = 2
AND M.mproduit_prix_type > 0
AND AM.aa002_localite_codepostal = 75017
AND A.annonceur_adresse_codepostal = 75017

UNION ALL

SELECT 2 AS tri,
AA.annonceur_raisonsocial_publique,
AA.annonceur_adresse_distribution,
AA.annonceur_adresse_voie_n,
AA.annonceur_adresse_voie_nom,
AA.annonceur_adresse_codepostal,
AA.annonceur_adresse_localite_nom,
AA.annonceur_photo1_actif,
AA.annonceur_photo1,
AA.annonceur_phone1_type,
AA.annonceur_estara,
AA.annonceur_phone1,
AA.annonceur_phone2_type,
AA.annonceur_phone2,
AA.annonceur_phone3_type,
AA.annonceur_phone3,
AA.annonceur_phone4_type,
AA.annonceur_phone4,
AA.annonceur_phone5_type,
AA.annonceur_phone5,
MM.mproduit_index,
MM.mproduit_motcle,
MM.mproduit_nom,
MM.mproduit_resume,
MM.mproduit_photo1,
MM.mproduit_photo1_actif,
MM.mproduit_prix_type,
MM.mproduit_prix,
MM.mproduit_prix_info

FROM mproduit
INNER JOIN annonceur AA
ON MM.mproduit_annonceur_ref = AA.annonceur_index

INNER JOIN aa002_annonceur_mproduit AAM
ON AA.annonceur_index = AAM.aa002_annonceur_ref

WHERE MM.mproduit_actif = 1
AND AA.annonceur_actif = 1
AND AA.annonceur_mbase_actif = 1
AND MM.mproduit_web_actif = 1
AND AAM.aa002_actif = 1
AND AAM.aa002_parution_actif = 1
AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND MM.mproduit_type = 0
AND AA.annonceur_type = 2
AND MM.mproduit_prix_type > 0
AND AAM.aa002_localite_codepostal = 75017
AND AA.annonceur_adresse_codepostal <> 75017

ORDER BY tri

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************

[Bruno] a écrit:

Bonjour a tous,



En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on





déjà

apporter.



Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
l'autre ; mais ça ne marche plus si je fait une UNION !

(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)





Voici le message d'erreur que j'obtiens :

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données text,
ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.







Ma requête :



SELECT 1 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref >>>annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND





(aa002_annonceur_mproduit.aa002_parution_actif >
1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal >




75017)



UNION



SELECT 2 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info

FROM mproduit

INNER JOIN annonceur ON
mproduit.mproduit_annonceur_ref = annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index = aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND





(aa002_annonceur_mproduit.aa002_parution_actif >
1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal <>
75017)



ORDER BY tri














--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
[Bruno]
Merci pour tes conseils

Bruno

"Fred BROUARD" a écrit dans le message de news:
#
Les alias allègent l'écriture et le rende plus lisible. De plus une
requête est un texte. Plus il est court, moins on utilise le processeur,
donc tu gagnera quelques infimes millisecondes...

CURRENT_TIMESTAMP est la fonction normative SQL 2
GetDate() est spécifique à SQL Server.
En utilisant systématiquement des commandes normatives tu devient plus
facilement portable. Cela ne coute pas plus cher !

A +



[Bruno] a écrit:
> YES !!!
>
> En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.
>
>
>
> Par contre pourquoi utiliser des ALIAS ?
>
>
>
> Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?
>
>
>
> Etant un heureux possesseur de ton livre, tu peux y faire référence.
>
>
>
> Bruno
>
>
>
>
> "Fred BROUARD" a écrit dans le message de


news:
>
>
>>1) utilises des alias
>>
>>2) évite les parenthèses inutiles
>>
>>3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
>>court appelle un DISTINCT implicite...
>>
>>
>>SELECT 1 AS tri,
>> A.annonceur_raisonsocial_publique,
>> A.annonceur_adresse_distribution,
>> A.annonceur_adresse_voie_n,
>> A.annonceur_adresse_voie_nom,
>> A.annonceur_adresse_codepostal,
>> A.annonceur_adresse_localite_nom,
>> A.annonceur_photo1_actif,
>> A.annonceur_photo1,
>> A.annonceur_phone1_type,
>> A.annonceur_estara,
>> A.annonceur_phone1,
>> A.annonceur_phone2_type,
>> A.annonceur_phone2,
>> A.annonceur_phone3_type,
>> A.annonceur_phone3,
>> A.annonceur_phone4_type,
>> A.annonceur_phone4,
>> A.annonceur_phone5_type,
>> A.annonceur_phone5,
>> M.mproduit_index,
>> M.mproduit_motcle,
>> M.mproduit_nom,
>> M.mproduit_resume,
>> M.mproduit_photo1,
>> M.mproduit_photo1_actif,
>> M.mproduit_prix_type,
>> M.mproduit_prix,
>> M.mproduit_prix_info
>>
>>FROM mproduit M
>> INNER JOIN annonceur A
>> ON M.mproduit_annonceur_ref = A.annonceur_index
>> INNER JOIN aa002_annonceur_mproduit AM
>> ON A.annonceur_index = AM.aa002_annonceur_ref
>>
>>WHERE M.mproduit_actif = 1
>> AND A.annonceur_actif = 1
>> AND A.annonceur_mbase_actif = 1
>> AND M.mproduit_web_actif = 1
>> AND AM.aa002_actif = 1
>> AND AM.aa002_parution_actif = 1
>> AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
>> AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
>> AND M.mproduit_type = 0
>> AND A.annonceur_type = 2
>> AND M.mproduit_prix_type > 0
>> AND AM.aa002_localite_codepostal = 75017
>> AND A.annonceur_adresse_codepostal = 75017
>>
>>UNION ALL
>>
>>SELECT 2 AS tri,
>> AA.annonceur_raisonsocial_publique,
>> AA.annonceur_adresse_distribution,
>> AA.annonceur_adresse_voie_n,
>> AA.annonceur_adresse_voie_nom,
>> AA.annonceur_adresse_codepostal,
>> AA.annonceur_adresse_localite_nom,
>> AA.annonceur_photo1_actif,
>> AA.annonceur_photo1,
>> AA.annonceur_phone1_type,
>> AA.annonceur_estara,
>> AA.annonceur_phone1,
>> AA.annonceur_phone2_type,
>> AA.annonceur_phone2,
>> AA.annonceur_phone3_type,
>> AA.annonceur_phone3,
>> AA.annonceur_phone4_type,
>> AA.annonceur_phone4,
>> AA.annonceur_phone5_type,
>> AA.annonceur_phone5,
>> MM.mproduit_index,
>> MM.mproduit_motcle,
>> MM.mproduit_nom,
>> MM.mproduit_resume,
>> MM.mproduit_photo1,
>> MM.mproduit_photo1_actif,
>> MM.mproduit_prix_type,
>> MM.mproduit_prix,
>> MM.mproduit_prix_info
>>
>>FROM mproduit
>> INNER JOIN annonceur AA
>> ON MM.mproduit_annonceur_ref = AA.annonceur_index
>>
>> INNER JOIN aa002_annonceur_mproduit AAM
>> ON AA.annonceur_index = AAM.aa002_annonceur_ref
>>
>>WHERE MM.mproduit_actif = 1
>> AND AA.annonceur_actif = 1
>> AND AA.annonceur_mbase_actif = 1
>> AND MM.mproduit_web_actif = 1
>> AND AAM.aa002_actif = 1
>> AND AAM.aa002_parution_actif = 1
>> AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
>> AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
>> AND MM.mproduit_type = 0
>> AND AA.annonceur_type = 2
>> AND MM.mproduit_prix_type > 0
>> AND AAM.aa002_localite_codepostal = 75017
>> AND AA.annonceur_adresse_codepostal <> 75017
>>
>>ORDER BY tri
>>
>>A +
>>
>>--
>>Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
>>Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>>Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>>****************** mailto: ******************
>>
>>[Bruno] a écrit:
>>
>>>Bonjour a tous,
>>>
>>>
>>>
>>>En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on
>
> déjà
>
>>>apporter.
>>>
>>>
>>>
>>>Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
>>>l'autre ; mais ça ne marche plus si je fait une UNION !
>>>
>>>(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)
>>>
>>>
>>>
>>>
>>>
>>>Voici le message d'erreur que j'obtiens :
>>>
>>>ODBC Error Code = 37000 (Syntax error or access violation)
>>>
>>>[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données


text,
>>>ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>Ma requête :
>>>
>>>
>>>
>>>SELECT 1 AS tri,
>>>
>>> annonceur.annonceur_raisonsocial_publique,
>>>
>>> annonceur.annonceur_adresse_distribution,
>>>
>>> annonceur.annonceur_adresse_voie_n,
>>>
>>> annonceur.annonceur_adresse_voie_nom,
>>>
>>> annonceur.annonceur_adresse_codepostal,
>>>
>>> annonceur.annonceur_adresse_localite_nom,
>>>
>>> annonceur.annonceur_photo1_actif,
>>>
>>> annonceur.annonceur_photo1,
>>>
>>> annonceur.annonceur_phone1_type,
>>>
>>> annonceur.annonceur_estara,
>>>
>>> annonceur.annonceur_phone1,
>>>
>>> annonceur.annonceur_phone2_type,
>>>
>>> annonceur.annonceur_phone2,
>>>
>>> annonceur.annonceur_phone3_type,
>>>
>>> annonceur.annonceur_phone3,
>>>
>>> annonceur.annonceur_phone4_type,
>>>
>>> annonceur.annonceur_phone4,
>>>
>>> annonceur.annonceur_phone5_type,
>>>
>>> annonceur.annonceur_phone5,
>>>
>>> mproduit.mproduit_index,
>>>
>>> mproduit.mproduit_motcle,
>>>
>>> mproduit.mproduit_nom,
>>>
>>> mproduit.mproduit_resume,
>>>
>>> mproduit.mproduit_photo1,
>>>
>>> mproduit.mproduit_photo1_actif,
>>>
>>> mproduit.mproduit_prix_type,
>>>
>>> mproduit.mproduit_prix,
>>>
>>> mproduit.mproduit_prix_info
>>>
>>>FROM mproduit
>>>
>>>INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref > >>>annonceur.annonceur_index
>>>
>>> INNER JOIN aa002_annonceur_mproduit ON
>>>annonceur.annonceur_index aa002_annonceur_mproduit.aa002_annonceur_ref
>>>
>>>WHERE (mproduit.mproduit_actif = 1)
>>>
>>> AND (annonceur.annonceur_actif = 1)
>>>
>>> AND (annonceur.annonceur_mbase_actif = 1)
>>>
>>> AND (mproduit.mproduit_web_actif = 1)
>>>
>>> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>>>
>>> AND
>
> (aa002_annonceur_mproduit.aa002_parution_actif > >
>>>1)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>>>
>>> AND (mproduit.mproduit_type = 0)
>>>
>>> AND (annonceur.annonceur_type = 2)
>>>
>>> AND (mproduit.mproduit_prix_type > 0)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>>>
>>> AND (annonceur.annonceur_adresse_codepostal > >
> 75017)
>
>>>
>>>
>>>UNION
>>>
>>>
>>>
>>>SELECT 2 AS tri,
>>>
>>> annonceur.annonceur_raisonsocial_publique,
>>>
>>> annonceur.annonceur_adresse_distribution,
>>>
>>> annonceur.annonceur_adresse_voie_n,
>>>
>>> annonceur.annonceur_adresse_voie_nom,
>>>
>>> annonceur.annonceur_adresse_codepostal,
>>>
>>> annonceur.annonceur_adresse_localite_nom,
>>>
>>> annonceur.annonceur_photo1_actif,
>>>
>>> annonceur.annonceur_photo1,
>>>
>>> annonceur.annonceur_phone1_type,
>>>
>>> annonceur.annonceur_estara,
>>>
>>> annonceur.annonceur_phone1,
>>>
>>> annonceur.annonceur_phone2_type,
>>>
>>> annonceur.annonceur_phone2,
>>>
>>> annonceur.annonceur_phone3_type,
>>>
>>> annonceur.annonceur_phone3,
>>>
>>> annonceur.annonceur_phone4_type,
>>>
>>> annonceur.annonceur_phone4,
>>>
>>> annonceur.annonceur_phone5_type,
>>>
>>> annonceur.annonceur_phone5,
>>>
>>> mproduit.mproduit_index,
>>>
>>> mproduit.mproduit_motcle,
>>>
>>> mproduit.mproduit_nom,
>>>
>>> mproduit.mproduit_resume,
>>>
>>> mproduit.mproduit_photo1,
>>>
>>> mproduit.mproduit_photo1_actif,
>>>
>>> mproduit.mproduit_prix_type,
>>>
>>> mproduit.mproduit_prix,
>>>
>>> mproduit.mproduit_prix_info
>>>
>>>FROM mproduit
>>>
>>> INNER JOIN annonceur ON
>>>mproduit.mproduit_annonceur_ref = annonceur.annonceur_index
>>>
>>> INNER JOIN aa002_annonceur_mproduit ON
>>>annonceur.annonceur_index aa002_annonceur_mproduit.aa002_annonceur_ref
>>>
>>>WHERE (mproduit.mproduit_actif = 1)
>>>
>>> AND (annonceur.annonceur_actif = 1)
>>>
>>> AND (annonceur.annonceur_mbase_actif = 1)
>>>
>>> AND (mproduit.mproduit_web_actif = 1)
>>>
>>> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>>>
>>> AND
>
> (aa002_annonceur_mproduit.aa002_parution_actif > >
>>>1)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>>>
>>> AND (mproduit.mproduit_type = 0)
>>>
>>> AND (annonceur.annonceur_type = 2)
>>>
>>> AND (mproduit.mproduit_prix_type > 0)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>>>
>>> AND (annonceur.annonceur_adresse_codepostal <>
>>>75017)
>>>
>>>
>>>
>>>ORDER BY tri
>>>
>>>
>>>
>>>
>>
>
>

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************



Avatar
[Bruno]
Question subsidiaire :

J'ai un PB avec l'instruction "substring" qui me sert a faire un tri "pseudo
aléatoire" en troisième niveaux de tri .

ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
substring(mproduit.mproduit_nom, 6, 1)

J'obtiens le message d'erreur suivant :

ODBC Error Code = 37000 (Syntax error or access violation)
[Microsoft][ODBC SQL Server Driver][SQL Server]Si l'instruction contient un
opérateur UNION, les éléments ORDER BY doivent figurer dans la liste de
sélection.


Or, si j'enlève l'instruction (voir ci-dessous), ca marche !

ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
mproduit.mproduit_nom


Y-a-t-il une solution ?



"Fred BROUARD" a écrit dans le message de news:
#
Les alias allègent l'écriture et le rende plus lisible. De plus une
requête est un texte. Plus il est court, moins on utilise le processeur,
donc tu gagnera quelques infimes millisecondes...

CURRENT_TIMESTAMP est la fonction normative SQL 2
GetDate() est spécifique à SQL Server.
En utilisant systématiquement des commandes normatives tu devient plus
facilement portable. Cela ne coute pas plus cher !

A +



[Bruno] a écrit:
> YES !!!
>
> En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.
>
>
>
> Par contre pourquoi utiliser des ALIAS ?
>
>
>
> Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?
>
>
>
> Etant un heureux possesseur de ton livre, tu peux y faire référence.
>
>
>
> Bruno
>
>
>
>
> "Fred BROUARD" a écrit dans le message de


news:
>
>
>>1) utilises des alias
>>
>>2) évite les parenthèses inutiles
>>
>>3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
>>court appelle un DISTINCT implicite...
>>
>>
>>SELECT 1 AS tri,
>> A.annonceur_raisonsocial_publique,
>> A.annonceur_adresse_distribution,
>> A.annonceur_adresse_voie_n,
>> A.annonceur_adresse_voie_nom,
>> A.annonceur_adresse_codepostal,
>> A.annonceur_adresse_localite_nom,
>> A.annonceur_photo1_actif,
>> A.annonceur_photo1,
>> A.annonceur_phone1_type,
>> A.annonceur_estara,
>> A.annonceur_phone1,
>> A.annonceur_phone2_type,
>> A.annonceur_phone2,
>> A.annonceur_phone3_type,
>> A.annonceur_phone3,
>> A.annonceur_phone4_type,
>> A.annonceur_phone4,
>> A.annonceur_phone5_type,
>> A.annonceur_phone5,
>> M.mproduit_index,
>> M.mproduit_motcle,
>> M.mproduit_nom,
>> M.mproduit_resume,
>> M.mproduit_photo1,
>> M.mproduit_photo1_actif,
>> M.mproduit_prix_type,
>> M.mproduit_prix,
>> M.mproduit_prix_info
>>
>>FROM mproduit M
>> INNER JOIN annonceur A
>> ON M.mproduit_annonceur_ref = A.annonceur_index
>> INNER JOIN aa002_annonceur_mproduit AM
>> ON A.annonceur_index = AM.aa002_annonceur_ref
>>
>>WHERE M.mproduit_actif = 1
>> AND A.annonceur_actif = 1
>> AND A.annonceur_mbase_actif = 1
>> AND M.mproduit_web_actif = 1
>> AND AM.aa002_actif = 1
>> AND AM.aa002_parution_actif = 1
>> AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
>> AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
>> AND M.mproduit_type = 0
>> AND A.annonceur_type = 2
>> AND M.mproduit_prix_type > 0
>> AND AM.aa002_localite_codepostal = 75017
>> AND A.annonceur_adresse_codepostal = 75017
>>
>>UNION ALL
>>
>>SELECT 2 AS tri,
>> AA.annonceur_raisonsocial_publique,
>> AA.annonceur_adresse_distribution,
>> AA.annonceur_adresse_voie_n,
>> AA.annonceur_adresse_voie_nom,
>> AA.annonceur_adresse_codepostal,
>> AA.annonceur_adresse_localite_nom,
>> AA.annonceur_photo1_actif,
>> AA.annonceur_photo1,
>> AA.annonceur_phone1_type,
>> AA.annonceur_estara,
>> AA.annonceur_phone1,
>> AA.annonceur_phone2_type,
>> AA.annonceur_phone2,
>> AA.annonceur_phone3_type,
>> AA.annonceur_phone3,
>> AA.annonceur_phone4_type,
>> AA.annonceur_phone4,
>> AA.annonceur_phone5_type,
>> AA.annonceur_phone5,
>> MM.mproduit_index,
>> MM.mproduit_motcle,
>> MM.mproduit_nom,
>> MM.mproduit_resume,
>> MM.mproduit_photo1,
>> MM.mproduit_photo1_actif,
>> MM.mproduit_prix_type,
>> MM.mproduit_prix,
>> MM.mproduit_prix_info
>>
>>FROM mproduit
>> INNER JOIN annonceur AA
>> ON MM.mproduit_annonceur_ref = AA.annonceur_index
>>
>> INNER JOIN aa002_annonceur_mproduit AAM
>> ON AA.annonceur_index = AAM.aa002_annonceur_ref
>>
>>WHERE MM.mproduit_actif = 1
>> AND AA.annonceur_actif = 1
>> AND AA.annonceur_mbase_actif = 1
>> AND MM.mproduit_web_actif = 1
>> AND AAM.aa002_actif = 1
>> AND AAM.aa002_parution_actif = 1
>> AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
>> AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
>> AND MM.mproduit_type = 0
>> AND AA.annonceur_type = 2
>> AND MM.mproduit_prix_type > 0
>> AND AAM.aa002_localite_codepostal = 75017
>> AND AA.annonceur_adresse_codepostal <> 75017
>>
>>ORDER BY tri
>>
>>A +
>>
>>--
>>Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
>>Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>>Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>>****************** mailto: ******************
>>
>>[Bruno] a écrit:
>>
>>>Bonjour a tous,
>>>
>>>
>>>
>>>En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on
>
> déjà
>
>>>apporter.
>>>
>>>
>>>
>>>Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
>>>l'autre ; mais ça ne marche plus si je fait une UNION !
>>>
>>>(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)
>>>
>>>
>>>
>>>
>>>
>>>Voici le message d'erreur que j'obtiens :
>>>
>>>ODBC Error Code = 37000 (Syntax error or access violation)
>>>
>>>[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données


text,
>>>ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>Ma requête :
>>>
>>>
>>>
>>>SELECT 1 AS tri,
>>>
>>> annonceur.annonceur_raisonsocial_publique,
>>>
>>> annonceur.annonceur_adresse_distribution,
>>>
>>> annonceur.annonceur_adresse_voie_n,
>>>
>>> annonceur.annonceur_adresse_voie_nom,
>>>
>>> annonceur.annonceur_adresse_codepostal,
>>>
>>> annonceur.annonceur_adresse_localite_nom,
>>>
>>> annonceur.annonceur_photo1_actif,
>>>
>>> annonceur.annonceur_photo1,
>>>
>>> annonceur.annonceur_phone1_type,
>>>
>>> annonceur.annonceur_estara,
>>>
>>> annonceur.annonceur_phone1,
>>>
>>> annonceur.annonceur_phone2_type,
>>>
>>> annonceur.annonceur_phone2,
>>>
>>> annonceur.annonceur_phone3_type,
>>>
>>> annonceur.annonceur_phone3,
>>>
>>> annonceur.annonceur_phone4_type,
>>>
>>> annonceur.annonceur_phone4,
>>>
>>> annonceur.annonceur_phone5_type,
>>>
>>> annonceur.annonceur_phone5,
>>>
>>> mproduit.mproduit_index,
>>>
>>> mproduit.mproduit_motcle,
>>>
>>> mproduit.mproduit_nom,
>>>
>>> mproduit.mproduit_resume,
>>>
>>> mproduit.mproduit_photo1,
>>>
>>> mproduit.mproduit_photo1_actif,
>>>
>>> mproduit.mproduit_prix_type,
>>>
>>> mproduit.mproduit_prix,
>>>
>>> mproduit.mproduit_prix_info
>>>
>>>FROM mproduit
>>>
>>>INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref > >>>annonceur.annonceur_index
>>>
>>> INNER JOIN aa002_annonceur_mproduit ON
>>>annonceur.annonceur_index aa002_annonceur_mproduit.aa002_annonceur_ref
>>>
>>>WHERE (mproduit.mproduit_actif = 1)
>>>
>>> AND (annonceur.annonceur_actif = 1)
>>>
>>> AND (annonceur.annonceur_mbase_actif = 1)
>>>
>>> AND (mproduit.mproduit_web_actif = 1)
>>>
>>> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>>>
>>> AND
>
> (aa002_annonceur_mproduit.aa002_parution_actif > >
>>>1)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>>>
>>> AND (mproduit.mproduit_type = 0)
>>>
>>> AND (annonceur.annonceur_type = 2)
>>>
>>> AND (mproduit.mproduit_prix_type > 0)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>>>
>>> AND (annonceur.annonceur_adresse_codepostal > >
> 75017)
>
>>>
>>>
>>>UNION
>>>
>>>
>>>
>>>SELECT 2 AS tri,
>>>
>>> annonceur.annonceur_raisonsocial_publique,
>>>
>>> annonceur.annonceur_adresse_distribution,
>>>
>>> annonceur.annonceur_adresse_voie_n,
>>>
>>> annonceur.annonceur_adresse_voie_nom,
>>>
>>> annonceur.annonceur_adresse_codepostal,
>>>
>>> annonceur.annonceur_adresse_localite_nom,
>>>
>>> annonceur.annonceur_photo1_actif,
>>>
>>> annonceur.annonceur_photo1,
>>>
>>> annonceur.annonceur_phone1_type,
>>>
>>> annonceur.annonceur_estara,
>>>
>>> annonceur.annonceur_phone1,
>>>
>>> annonceur.annonceur_phone2_type,
>>>
>>> annonceur.annonceur_phone2,
>>>
>>> annonceur.annonceur_phone3_type,
>>>
>>> annonceur.annonceur_phone3,
>>>
>>> annonceur.annonceur_phone4_type,
>>>
>>> annonceur.annonceur_phone4,
>>>
>>> annonceur.annonceur_phone5_type,
>>>
>>> annonceur.annonceur_phone5,
>>>
>>> mproduit.mproduit_index,
>>>
>>> mproduit.mproduit_motcle,
>>>
>>> mproduit.mproduit_nom,
>>>
>>> mproduit.mproduit_resume,
>>>
>>> mproduit.mproduit_photo1,
>>>
>>> mproduit.mproduit_photo1_actif,
>>>
>>> mproduit.mproduit_prix_type,
>>>
>>> mproduit.mproduit_prix,
>>>
>>> mproduit.mproduit_prix_info
>>>
>>>FROM mproduit
>>>
>>> INNER JOIN annonceur ON
>>>mproduit.mproduit_annonceur_ref = annonceur.annonceur_index
>>>
>>> INNER JOIN aa002_annonceur_mproduit ON
>>>annonceur.annonceur_index aa002_annonceur_mproduit.aa002_annonceur_ref
>>>
>>>WHERE (mproduit.mproduit_actif = 1)
>>>
>>> AND (annonceur.annonceur_actif = 1)
>>>
>>> AND (annonceur.annonceur_mbase_actif = 1)
>>>
>>> AND (mproduit.mproduit_web_actif = 1)
>>>
>>> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>>>
>>> AND
>
> (aa002_annonceur_mproduit.aa002_parution_actif > >
>>>1)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>>>
>>> AND (mproduit.mproduit_type = 0)
>>>
>>> AND (annonceur.annonceur_type = 2)
>>>
>>> AND (mproduit.mproduit_prix_type > 0)
>>>
>>> AND
>>>(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>>>
>>> AND (annonceur.annonceur_adresse_codepostal <>
>>>75017)
>>>
>>>
>>>
>>>ORDER BY tri
>>>
>>>
>>>
>>>
>>
>
>

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************



Avatar
Fred BROUARD
Mieux vaut dans ce cas reprendre cette requête dans la clause FROM d'une
autre et y ajouter cet élément.

A +

[Bruno] a écrit:
Question subsidiaire :

J'ai un PB avec l'instruction "substring" qui me sert a faire un tri "pseudo
aléatoire" en troisième niveaux de tri .

ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
substring(mproduit.mproduit_nom, 6, 1)

J'obtiens le message d'erreur suivant :

ODBC Error Code = 37000 (Syntax error or access violation)
[Microsoft][ODBC SQL Server Driver][SQL Server]Si l'instruction contient un
opérateur UNION, les éléments ORDER BY doivent figurer dans la liste de
sélection.


Or, si j'enlève l'instruction (voir ci-dessous), ca marche !

ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
mproduit.mproduit_nom


Y-a-t-il une solution ?



"Fred BROUARD" a écrit dans le message de news:
#

Les alias allègent l'écriture et le rende plus lisible. De plus une
requête est un texte. Plus il est court, moins on utilise le processeur,
donc tu gagnera quelques infimes millisecondes...

CURRENT_TIMESTAMP est la fonction normative SQL 2
GetDate() est spécifique à SQL Server.
En utilisant systématiquement des commandes normatives tu devient plus
facilement portable. Cela ne coute pas plus cher !

A +



[Bruno] a écrit:

YES !!!

En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.



Par contre pourquoi utiliser des ALIAS ?



Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?



Etant un heureux possesseur de ton livre, tu peux y faire référence.



Bruno




"Fred BROUARD" a écrit dans le message de





news:




1) utilises des alias

2) évite les parenthèses inutiles

3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
court appelle un DISTINCT implicite...


SELECT 1 AS tri,
A.annonceur_raisonsocial_publique,
A.annonceur_adresse_distribution,
A.annonceur_adresse_voie_n,
A.annonceur_adresse_voie_nom,
A.annonceur_adresse_codepostal,
A.annonceur_adresse_localite_nom,
A.annonceur_photo1_actif,
A.annonceur_photo1,
A.annonceur_phone1_type,
A.annonceur_estara,
A.annonceur_phone1,
A.annonceur_phone2_type,
A.annonceur_phone2,
A.annonceur_phone3_type,
A.annonceur_phone3,
A.annonceur_phone4_type,
A.annonceur_phone4,
A.annonceur_phone5_type,
A.annonceur_phone5,
M.mproduit_index,
M.mproduit_motcle,
M.mproduit_nom,
M.mproduit_resume,
M.mproduit_photo1,
M.mproduit_photo1_actif,
M.mproduit_prix_type,
M.mproduit_prix,
M.mproduit_prix_info




FROM mproduit M



INNER JOIN annonceur A
ON M.mproduit_annonceur_ref = A.annonceur_index
INNER JOIN aa002_annonceur_mproduit AM
ON A.annonceur_index = AM.aa002_annonceur_ref

WHERE M.mproduit_actif = 1
AND A.annonceur_actif = 1
AND A.annonceur_mbase_actif = 1
AND M.mproduit_web_actif = 1
AND AM.aa002_actif = 1
AND AM.aa002_parution_actif = 1
AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND M.mproduit_type = 0
AND A.annonceur_type = 2
AND M.mproduit_prix_type > 0
AND AM.aa002_localite_codepostal = 75017
AND A.annonceur_adresse_codepostal = 75017

UNION ALL

SELECT 2 AS tri,
AA.annonceur_raisonsocial_publique,
AA.annonceur_adresse_distribution,
AA.annonceur_adresse_voie_n,
AA.annonceur_adresse_voie_nom,
AA.annonceur_adresse_codepostal,
AA.annonceur_adresse_localite_nom,
AA.annonceur_photo1_actif,
AA.annonceur_photo1,
AA.annonceur_phone1_type,
AA.annonceur_estara,
AA.annonceur_phone1,
AA.annonceur_phone2_type,
AA.annonceur_phone2,
AA.annonceur_phone3_type,
AA.annonceur_phone3,
AA.annonceur_phone4_type,
AA.annonceur_phone4,
AA.annonceur_phone5_type,
AA.annonceur_phone5,
MM.mproduit_index,
MM.mproduit_motcle,
MM.mproduit_nom,
MM.mproduit_resume,
MM.mproduit_photo1,
MM.mproduit_photo1_actif,
MM.mproduit_prix_type,
MM.mproduit_prix,
MM.mproduit_prix_info




FROM mproduit



INNER JOIN annonceur AA
ON MM.mproduit_annonceur_ref = AA.annonceur_index

INNER JOIN aa002_annonceur_mproduit AAM
ON AA.annonceur_index = AAM.aa002_annonceur_ref

WHERE MM.mproduit_actif = 1
AND AA.annonceur_actif = 1
AND AA.annonceur_mbase_actif = 1
AND MM.mproduit_web_actif = 1
AND AAM.aa002_actif = 1
AND AAM.aa002_parution_actif = 1
AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND MM.mproduit_type = 0
AND AA.annonceur_type = 2
AND MM.mproduit_prix_type > 0
AND AAM.aa002_localite_codepostal = 75017
AND AA.annonceur_adresse_codepostal <> 75017

ORDER BY tri

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************

[Bruno] a écrit:


Bonjour a tous,



En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on





déjà


apporter.



Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
l'autre ; mais ça ne marche plus si je fait une UNION !

(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)





Voici le message d'erreur que j'obtiens :

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données









text,

ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.







Ma requête :



SELECT 1 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info




FROM mproduit



INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref >>>>>annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index >








aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND





(aa002_annonceur_mproduit.aa002_parution_actif >>>

1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal >>>




75017)



UNION



SELECT 2 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info




FROM mproduit



INNER JOIN annonceur ON
mproduit.mproduit_annonceur_ref = annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index >








aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND





(aa002_annonceur_mproduit.aa002_parution_actif >>>

1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal <>
75017)



ORDER BY tri












--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************









--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
Fred BROUARD
Mieux vaut dans ce cas reprendre cette requête dans la clause FROM d'une
autre et y ajouter cet élément.

A +

[Bruno] a écrit:
Question subsidiaire :

J'ai un PB avec l'instruction "substring" qui me sert a faire un tri "pseudo
aléatoire" en troisième niveaux de tri .

ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
substring(mproduit.mproduit_nom, 6, 1)

J'obtiens le message d'erreur suivant :

ODBC Error Code = 37000 (Syntax error or access violation)
[Microsoft][ODBC SQL Server Driver][SQL Server]Si l'instruction contient un
opérateur UNION, les éléments ORDER BY doivent figurer dans la liste de
sélection.


Or, si j'enlève l'instruction (voir ci-dessous), ca marche !

ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
mproduit.mproduit_nom


Y-a-t-il une solution ?



"Fred BROUARD" a écrit dans le message de news:
#

Les alias allègent l'écriture et le rende plus lisible. De plus une
requête est un texte. Plus il est court, moins on utilise le processeur,
donc tu gagnera quelques infimes millisecondes...

CURRENT_TIMESTAMP est la fonction normative SQL 2
GetDate() est spécifique à SQL Server.
En utilisant systématiquement des commandes normatives tu devient plus
facilement portable. Cela ne coute pas plus cher !

A +



[Bruno] a écrit:

YES !!!

En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.



Par contre pourquoi utiliser des ALIAS ?



Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?



Etant un heureux possesseur de ton livre, tu peux y faire référence.



Bruno




"Fred BROUARD" a écrit dans le message de





news:




1) utilises des alias

2) évite les parenthèses inutiles

3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION tout
court appelle un DISTINCT implicite...


SELECT 1 AS tri,
A.annonceur_raisonsocial_publique,
A.annonceur_adresse_distribution,
A.annonceur_adresse_voie_n,
A.annonceur_adresse_voie_nom,
A.annonceur_adresse_codepostal,
A.annonceur_adresse_localite_nom,
A.annonceur_photo1_actif,
A.annonceur_photo1,
A.annonceur_phone1_type,
A.annonceur_estara,
A.annonceur_phone1,
A.annonceur_phone2_type,
A.annonceur_phone2,
A.annonceur_phone3_type,
A.annonceur_phone3,
A.annonceur_phone4_type,
A.annonceur_phone4,
A.annonceur_phone5_type,
A.annonceur_phone5,
M.mproduit_index,
M.mproduit_motcle,
M.mproduit_nom,
M.mproduit_resume,
M.mproduit_photo1,
M.mproduit_photo1_actif,
M.mproduit_prix_type,
M.mproduit_prix,
M.mproduit_prix_info




FROM mproduit M



INNER JOIN annonceur A
ON M.mproduit_annonceur_ref = A.annonceur_index
INNER JOIN aa002_annonceur_mproduit AM
ON A.annonceur_index = AM.aa002_annonceur_ref

WHERE M.mproduit_actif = 1
AND A.annonceur_actif = 1
AND A.annonceur_mbase_actif = 1
AND M.mproduit_web_actif = 1
AND AM.aa002_actif = 1
AND AM.aa002_parution_actif = 1
AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND M.mproduit_type = 0
AND A.annonceur_type = 2
AND M.mproduit_prix_type > 0
AND AM.aa002_localite_codepostal = 75017
AND A.annonceur_adresse_codepostal = 75017

UNION ALL

SELECT 2 AS tri,
AA.annonceur_raisonsocial_publique,
AA.annonceur_adresse_distribution,
AA.annonceur_adresse_voie_n,
AA.annonceur_adresse_voie_nom,
AA.annonceur_adresse_codepostal,
AA.annonceur_adresse_localite_nom,
AA.annonceur_photo1_actif,
AA.annonceur_photo1,
AA.annonceur_phone1_type,
AA.annonceur_estara,
AA.annonceur_phone1,
AA.annonceur_phone2_type,
AA.annonceur_phone2,
AA.annonceur_phone3_type,
AA.annonceur_phone3,
AA.annonceur_phone4_type,
AA.annonceur_phone4,
AA.annonceur_phone5_type,
AA.annonceur_phone5,
MM.mproduit_index,
MM.mproduit_motcle,
MM.mproduit_nom,
MM.mproduit_resume,
MM.mproduit_photo1,
MM.mproduit_photo1_actif,
MM.mproduit_prix_type,
MM.mproduit_prix,
MM.mproduit_prix_info




FROM mproduit



INNER JOIN annonceur AA
ON MM.mproduit_annonceur_ref = AA.annonceur_index

INNER JOIN aa002_annonceur_mproduit AAM
ON AA.annonceur_index = AAM.aa002_annonceur_ref

WHERE MM.mproduit_actif = 1
AND AA.annonceur_actif = 1
AND AA.annonceur_mbase_actif = 1
AND MM.mproduit_web_actif = 1
AND AAM.aa002_actif = 1
AND AAM.aa002_parution_actif = 1
AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
AND MM.mproduit_type = 0
AND AA.annonceur_type = 2
AND MM.mproduit_prix_type > 0
AND AAM.aa002_localite_codepostal = 75017
AND AA.annonceur_adresse_codepostal <> 75017

ORDER BY tri

A +

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************

[Bruno] a écrit:


Bonjour a tous,



En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il m'on





déjà


apporter.



Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une et
l'autre ; mais ça ne marche plus si je fait une UNION !

(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)





Voici le message d'erreur que j'obtiens :

ODBC Error Code = 37000 (Syntax error or access violation)

[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données









text,

ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.







Ma requête :



SELECT 1 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info




FROM mproduit



INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref >>>>>annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index >








aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND





(aa002_annonceur_mproduit.aa002_parution_actif >>>

1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal >>>




75017)



UNION



SELECT 2 AS tri,

annonceur.annonceur_raisonsocial_publique,

annonceur.annonceur_adresse_distribution,

annonceur.annonceur_adresse_voie_n,

annonceur.annonceur_adresse_voie_nom,

annonceur.annonceur_adresse_codepostal,

annonceur.annonceur_adresse_localite_nom,

annonceur.annonceur_photo1_actif,

annonceur.annonceur_photo1,

annonceur.annonceur_phone1_type,

annonceur.annonceur_estara,

annonceur.annonceur_phone1,

annonceur.annonceur_phone2_type,

annonceur.annonceur_phone2,

annonceur.annonceur_phone3_type,

annonceur.annonceur_phone3,

annonceur.annonceur_phone4_type,

annonceur.annonceur_phone4,

annonceur.annonceur_phone5_type,

annonceur.annonceur_phone5,

mproduit.mproduit_index,

mproduit.mproduit_motcle,

mproduit.mproduit_nom,

mproduit.mproduit_resume,

mproduit.mproduit_photo1,

mproduit.mproduit_photo1_actif,

mproduit.mproduit_prix_type,

mproduit.mproduit_prix,

mproduit.mproduit_prix_info




FROM mproduit



INNER JOIN annonceur ON
mproduit.mproduit_annonceur_ref = annonceur.annonceur_index

INNER JOIN aa002_annonceur_mproduit ON
annonceur.annonceur_index >








aa002_annonceur_mproduit.aa002_annonceur_ref

WHERE (mproduit.mproduit_actif = 1)

AND (annonceur.annonceur_actif = 1)

AND (annonceur.annonceur_mbase_actif = 1)

AND (mproduit.mproduit_web_actif = 1)

AND (aa002_annonceur_mproduit.aa002_actif = 1)

AND





(aa002_annonceur_mproduit.aa002_parution_actif >>>

1)

AND
(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())

AND
(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())

AND (mproduit.mproduit_type = 0)

AND (annonceur.annonceur_type = 2)

AND (mproduit.mproduit_prix_type > 0)

AND
(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)

AND (annonceur.annonceur_adresse_codepostal <>
75017)



ORDER BY tri












--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************









--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
[Bruno]
Je ne vois pas comment il faut faire !
Mon niveau est plutot dédutant !

Peux tu m'éclairer ?


"Fred BROUARD" a écrit t dans le message de
news:
Mieux vaut dans ce cas reprendre cette requête dans la clause FROM d'une
autre et y ajouter cet élément.

A +

[Bruno] a écrit:
> Question subsidiaire :
>
> J'ai un PB avec l'instruction "substring" qui me sert a faire un tri


"pseudo
> aléatoire" en troisième niveaux de tri .
>
> ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
> substring(mproduit.mproduit_nom, 6, 1)
>
> J'obtiens le message d'erreur suivant :
>
> ODBC Error Code = 37000 (Syntax error or access violation)
> [Microsoft][ODBC SQL Server Driver][SQL Server]Si l'instruction contient


un
> opérateur UNION, les éléments ORDER BY doivent figurer dans la liste de
> sélection.
>
>
> Or, si j'enlève l'instruction (voir ci-dessous), ca marche !
>
> ORDER BY tri, aa002_annonceur_mproduit.aa002_parution_tri,
> mproduit.mproduit_nom
>
>
> Y-a-t-il une solution ?
>
>
>
> "Fred BROUARD" a écrit dans le message de


news:
> #
>
>>Les alias allègent l'écriture et le rende plus lisible. De plus une
>>requête est un texte. Plus il est court, moins on utilise le processeur,
>>donc tu gagnera quelques infimes millisecondes...
>>
>>CURRENT_TIMESTAMP est la fonction normative SQL 2
>>GetDate() est spécifique à SQL Server.
>>En utilisant systématiquement des commandes normatives tu devient plus
>>facilement portable. Cela ne coute pas plus cher !
>>
>>A +
>>
>>
>>
>>[Bruno] a écrit:
>>
>>>YES !!!
>>>
>>>En rajoutant "ALL" ça marche , merci, M'ieur BROUARD.
>>>
>>>
>>>
>>>Par contre pourquoi utiliser des ALIAS ?
>>>
>>>
>>>
>>>Et pourquoi l'instruction "CURRENT_TIMESTAMP" au lieux de "GETDATE()" ?
>>>
>>>
>>>
>>>Etant un heureux possesseur de ton livre, tu peux y faire référence.
>>>
>>>
>>>
>>>Bruno
>>>
>>>
>>>
>>>
>>>"Fred BROUARD" a écrit dans le message de
>
> news:
>
>>>
>>>
>>>
>>>>1) utilises des alias
>>>>
>>>>2) évite les parenthèses inutiles
>>>>
>>>>3) ajoute ALL à l'union. Je ne sais si cela marche , mais le UNION


tout
>>>>court appelle un DISTINCT implicite...
>>>>
>>>>
>>>>SELECT 1 AS tri,
>>>> A.annonceur_raisonsocial_publique,
>>>> A.annonceur_adresse_distribution,
>>>> A.annonceur_adresse_voie_n,
>>>> A.annonceur_adresse_voie_nom,
>>>> A.annonceur_adresse_codepostal,
>>>> A.annonceur_adresse_localite_nom,
>>>> A.annonceur_photo1_actif,
>>>> A.annonceur_photo1,
>>>> A.annonceur_phone1_type,
>>>> A.annonceur_estara,
>>>> A.annonceur_phone1,
>>>> A.annonceur_phone2_type,
>>>> A.annonceur_phone2,
>>>> A.annonceur_phone3_type,
>>>> A.annonceur_phone3,
>>>> A.annonceur_phone4_type,
>>>> A.annonceur_phone4,
>>>> A.annonceur_phone5_type,
>>>> A.annonceur_phone5,
>>>> M.mproduit_index,
>>>> M.mproduit_motcle,
>>>> M.mproduit_nom,
>>>> M.mproduit_resume,
>>>> M.mproduit_photo1,
>>>> M.mproduit_photo1_actif,
>>>> M.mproduit_prix_type,
>>>> M.mproduit_prix,
>>>> M.mproduit_prix_info
>>>>
>>>
>>>>FROM mproduit M
>>>
>>>> INNER JOIN annonceur A
>>>> ON M.mproduit_annonceur_ref = A.annonceur_index
>>>> INNER JOIN aa002_annonceur_mproduit AM
>>>> ON A.annonceur_index = AM.aa002_annonceur_ref
>>>>
>>>>WHERE M.mproduit_actif = 1
>>>> AND A.annonceur_actif = 1
>>>> AND A.annonceur_mbase_actif = 1
>>>> AND M.mproduit_web_actif = 1
>>>> AND AM.aa002_actif = 1
>>>> AND AM.aa002_parution_actif = 1
>>>> AND AM.aa002_date_parution_debut < CURRENT_TIMESTAMP
>>>> AND AM.aa002_date_parution_fin > CURRENT_TIMESTAMP
>>>> AND M.mproduit_type = 0
>>>> AND A.annonceur_type = 2
>>>> AND M.mproduit_prix_type > 0
>>>> AND AM.aa002_localite_codepostal = 75017
>>>> AND A.annonceur_adresse_codepostal = 75017
>>>>
>>>>UNION ALL
>>>>
>>>>SELECT 2 AS tri,
>>>> AA.annonceur_raisonsocial_publique,
>>>> AA.annonceur_adresse_distribution,
>>>> AA.annonceur_adresse_voie_n,
>>>> AA.annonceur_adresse_voie_nom,
>>>> AA.annonceur_adresse_codepostal,
>>>> AA.annonceur_adresse_localite_nom,
>>>> AA.annonceur_photo1_actif,
>>>> AA.annonceur_photo1,
>>>> AA.annonceur_phone1_type,
>>>> AA.annonceur_estara,
>>>> AA.annonceur_phone1,
>>>> AA.annonceur_phone2_type,
>>>> AA.annonceur_phone2,
>>>> AA.annonceur_phone3_type,
>>>> AA.annonceur_phone3,
>>>> AA.annonceur_phone4_type,
>>>> AA.annonceur_phone4,
>>>> AA.annonceur_phone5_type,
>>>> AA.annonceur_phone5,
>>>> MM.mproduit_index,
>>>> MM.mproduit_motcle,
>>>> MM.mproduit_nom,
>>>> MM.mproduit_resume,
>>>> MM.mproduit_photo1,
>>>> MM.mproduit_photo1_actif,
>>>> MM.mproduit_prix_type,
>>>> MM.mproduit_prix,
>>>> MM.mproduit_prix_info
>>>>
>>>
>>>>FROM mproduit
>>>
>>>> INNER JOIN annonceur AA
>>>> ON MM.mproduit_annonceur_ref = AA.annonceur_index
>>>>
>>>> INNER JOIN aa002_annonceur_mproduit AAM
>>>> ON AA.annonceur_index = AAM.aa002_annonceur_ref
>>>>
>>>>WHERE MM.mproduit_actif = 1
>>>> AND AA.annonceur_actif = 1
>>>> AND AA.annonceur_mbase_actif = 1
>>>> AND MM.mproduit_web_actif = 1
>>>> AND AAM.aa002_actif = 1
>>>> AND AAM.aa002_parution_actif = 1
>>>> AND AAM.aa002_date_parution_debut < CURRENT_TIMESTAMP
>>>> AND AAM.aa002_date_parution_fin > CURRENT_TIMESTAMP
>>>> AND MM.mproduit_type = 0
>>>> AND AA.annonceur_type = 2
>>>> AND MM.mproduit_prix_type > 0
>>>> AND AAM.aa002_localite_codepostal = 75017
>>>> AND AA.annonceur_adresse_codepostal <> 75017
>>>>
>>>>ORDER BY tri
>>>>
>>>>A +
>>>>
>>>>--
>>>>Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
>>>>Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>>>>Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>>>>****************** mailto: ******************
>>>>
>>>>[Bruno] a écrit:
>>>>
>>>>
>>>>>Bonjour a tous,
>>>>>
>>>>>
>>>>>
>>>>>En préambule, je remercie AXL et Pierre GOIFFON pour l'aide qu'il


m'on
>>>
>>>déjà
>>>
>>>
>>>>>apporter.
>>>>>
>>>>>
>>>>>
>>>>>Bon Voici, ci-dessous, mes requêtes ; elle marchent très bien l'une


et
>>>>>l'autre ; mais ça ne marche plus si je fait une UNION !
>>>>>
>>>>>(Ce sont quasiment les deux mêmes , Seule la dernière ligne Change)
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>Voici le message d'erreur que j'obtiens :
>>>>>
>>>>>ODBC Error Code = 37000 (Syntax error or access violation)
>>>>>
>>>>>[Microsoft][ODBC SQL Server Driver][SQL Server]Les type de données
>
> text,
>
>>>>>ntext ou image ne peuvent pas être sélectionnés comme DISTINCT.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>Ma requête :
>>>>>
>>>>>
>>>>>
>>>>>SELECT 1 AS tri,
>>>>>
>>>>> annonceur.annonceur_raisonsocial_publique,
>>>>>
>>>>> annonceur.annonceur_adresse_distribution,
>>>>>
>>>>> annonceur.annonceur_adresse_voie_n,
>>>>>
>>>>> annonceur.annonceur_adresse_voie_nom,
>>>>>
>>>>> annonceur.annonceur_adresse_codepostal,
>>>>>
>>>>> annonceur.annonceur_adresse_localite_nom,
>>>>>
>>>>> annonceur.annonceur_photo1_actif,
>>>>>
>>>>> annonceur.annonceur_photo1,
>>>>>
>>>>> annonceur.annonceur_phone1_type,
>>>>>
>>>>> annonceur.annonceur_estara,
>>>>>
>>>>> annonceur.annonceur_phone1,
>>>>>
>>>>> annonceur.annonceur_phone2_type,
>>>>>
>>>>> annonceur.annonceur_phone2,
>>>>>
>>>>> annonceur.annonceur_phone3_type,
>>>>>
>>>>> annonceur.annonceur_phone3,
>>>>>
>>>>> annonceur.annonceur_phone4_type,
>>>>>
>>>>> annonceur.annonceur_phone4,
>>>>>
>>>>> annonceur.annonceur_phone5_type,
>>>>>
>>>>> annonceur.annonceur_phone5,
>>>>>
>>>>> mproduit.mproduit_index,
>>>>>
>>>>> mproduit.mproduit_motcle,
>>>>>
>>>>> mproduit.mproduit_nom,
>>>>>
>>>>> mproduit.mproduit_resume,
>>>>>
>>>>> mproduit.mproduit_photo1,
>>>>>
>>>>> mproduit.mproduit_photo1_actif,
>>>>>
>>>>> mproduit.mproduit_prix_type,
>>>>>
>>>>> mproduit.mproduit_prix,
>>>>>
>>>>> mproduit.mproduit_prix_info
>>>>>
>>>>
>>>>>FROM mproduit
>>>>
>>>>>INNER JOIN annonceur ON mproduit.mproduit_annonceur_ref > >>>>>annonceur.annonceur_index
>>>>>
>>>>> INNER JOIN aa002_annonceur_mproduit ON
>>>>>annonceur.annonceur_index > >
> aa002_annonceur_mproduit.aa002_annonceur_ref
>
>>>>>WHERE (mproduit.mproduit_actif = 1)
>>>>>
>>>>> AND (annonceur.annonceur_actif = 1)
>>>>>
>>>>> AND (annonceur.annonceur_mbase_actif = 1)
>>>>>
>>>>> AND (mproduit.mproduit_web_actif = 1)
>>>>>
>>>>> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>>>>>
>>>>> AND
>>>
>>>(aa002_annonceur_mproduit.aa002_parution_actif > >>>
>>>
>>>>>1)
>>>>>
>>>>> AND
>>>>>(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>>>>>
>>>>> AND
>>>>>(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>>>>>
>>>>> AND (mproduit.mproduit_type = 0)
>>>>>
>>>>> AND (annonceur.annonceur_type = 2)
>>>>>
>>>>> AND (mproduit.mproduit_prix_type > 0)
>>>>>
>>>>> AND
>>>>>(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>>>>>
>>>>> AND (annonceur.annonceur_adresse_codepostal > >>>
>>>75017)
>>>
>>>
>>>>>
>>>>>UNION
>>>>>
>>>>>
>>>>>
>>>>>SELECT 2 AS tri,
>>>>>
>>>>> annonceur.annonceur_raisonsocial_publique,
>>>>>
>>>>> annonceur.annonceur_adresse_distribution,
>>>>>
>>>>> annonceur.annonceur_adresse_voie_n,
>>>>>
>>>>> annonceur.annonceur_adresse_voie_nom,
>>>>>
>>>>> annonceur.annonceur_adresse_codepostal,
>>>>>
>>>>> annonceur.annonceur_adresse_localite_nom,
>>>>>
>>>>> annonceur.annonceur_photo1_actif,
>>>>>
>>>>> annonceur.annonceur_photo1,
>>>>>
>>>>> annonceur.annonceur_phone1_type,
>>>>>
>>>>> annonceur.annonceur_estara,
>>>>>
>>>>> annonceur.annonceur_phone1,
>>>>>
>>>>> annonceur.annonceur_phone2_type,
>>>>>
>>>>> annonceur.annonceur_phone2,
>>>>>
>>>>> annonceur.annonceur_phone3_type,
>>>>>
>>>>> annonceur.annonceur_phone3,
>>>>>
>>>>> annonceur.annonceur_phone4_type,
>>>>>
>>>>> annonceur.annonceur_phone4,
>>>>>
>>>>> annonceur.annonceur_phone5_type,
>>>>>
>>>>> annonceur.annonceur_phone5,
>>>>>
>>>>> mproduit.mproduit_index,
>>>>>
>>>>> mproduit.mproduit_motcle,
>>>>>
>>>>> mproduit.mproduit_nom,
>>>>>
>>>>> mproduit.mproduit_resume,
>>>>>
>>>>> mproduit.mproduit_photo1,
>>>>>
>>>>> mproduit.mproduit_photo1_actif,
>>>>>
>>>>> mproduit.mproduit_prix_type,
>>>>>
>>>>> mproduit.mproduit_prix,
>>>>>
>>>>> mproduit.mproduit_prix_info
>>>>>
>>>>
>>>>>FROM mproduit
>>>>
>>>>> INNER JOIN annonceur ON
>>>>>mproduit.mproduit_annonceur_ref = annonceur.annonceur_index
>>>>>
>>>>> INNER JOIN aa002_annonceur_mproduit ON
>>>>>annonceur.annonceur_index > >
> aa002_annonceur_mproduit.aa002_annonceur_ref
>
>>>>>WHERE (mproduit.mproduit_actif = 1)
>>>>>
>>>>> AND (annonceur.annonceur_actif = 1)
>>>>>
>>>>> AND (annonceur.annonceur_mbase_actif = 1)
>>>>>
>>>>> AND (mproduit.mproduit_web_actif = 1)
>>>>>
>>>>> AND (aa002_annonceur_mproduit.aa002_actif = 1)
>>>>>
>>>>> AND
>>>
>>>(aa002_annonceur_mproduit.aa002_parution_actif > >>>
>>>
>>>>>1)
>>>>>
>>>>> AND
>>>>>(aa002_annonceur_mproduit.aa002_date_parution_debut < GETDATE())
>>>>>
>>>>> AND
>>>>>(aa002_annonceur_mproduit.aa002_date_parution_fin > GETDATE())
>>>>>
>>>>> AND (mproduit.mproduit_type = 0)
>>>>>
>>>>> AND (annonceur.annonceur_type = 2)
>>>>>
>>>>> AND (mproduit.mproduit_prix_type > 0)
>>>>>
>>>>> AND
>>>>>(aa002_annonceur_mproduit.aa002_localite_codepostal = 75017)
>>>>>
>>>>> AND (annonceur.annonceur_adresse_codepostal <>
>>>>>75017)
>>>>>
>>>>>
>>>>>
>>>>>ORDER BY tri
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>--
>>Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
>>Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
>>Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
>>****************** mailto: ******************
>>
>
>
>

--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************