J'ai deux tables:
1. tableA est une liste d'enregistrements avec beaucoup de colonnes. Il y a une colonne d'horodatage appelée "créée"
2. La tableB est utilisée pour suivre les utilisateurs de mon application qui ont verrouillé un enregistrement dans la tableA pour révision. Il se compose de quatre colonnes: id, user_id, record_id et une autre colonne d'horodatage. J'essaie de sélectionner jusqu'à 10 enregistrements de la tableA qui n'ont pas été verrouillés par pour quelqu'un de tableB (je filtre aussi dans la clause WHERE par quelques autres colonnes de tableA comme statut d'enregistrement). Voici ce que je suis venu avec jusqu'à présent:Pourquoi cette instruction SELECT ... JOIN ne renvoie aucun résultat?
SELECT tableA.* FROM tableA
LEFT OUTER JOIN tableB ON tableA.id = tableB.record_id WHERE
tableB.id = NULL AND
tableA.status = 'new' AND
tableA.project != 'someproject' AND
tableA.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'
ORDER BY tableA.created ASC LIMIT 0, 10;
Il y a actuellement quelques milliers de dossiers dans tableA et enregistrements nuls dans tableB. Il y a certainement des documents qui se situent entre ces horodatages, et je l'ai vérifié cela avec un simple
SELECT * FROM tableA WHERE
created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'
La première déclaration ci-dessus renvoie zéro lignes, et le second retourne plus de 2000 lignes.
Excellent. Travaillé comme un charme. Je vous remercie! – Stephen