我有两张桌子;动物_Table和动物里程碑_Table。
动物中的一些动物_Table在动物里程碑_Table中有摄入记录,有些则没有。我想加入animalID上的两个表,并显示animals_Table中的所有行,包括那些在animalMilestones_Table中没有匹配的'Intake'记录的行。
以下是我尝试过的两件事,我认为这会给成功提供最好的机会,但唉,既不工作。
SELECT animals_Table.animalID, animalMilestones_Table.milestoneType
FROM animals_Table
LEFT JOIN animalMilestones_Table ON animals_Table.animalID=animalMilestones_Table.animalID
WHERE animalMilestones_Table.milestoneType="Intake"
SELECT animalID
FROM animals_Table
LEFT JOIN (SELECT milestoneType
FROM animalMilestones_Table
WHERE animalMilestones_Table.milestoneType = "Intake")
ON animals_Table.animalID = animalMilestones_Table.animalID
答案 0 :(得分:1)
在我看来,你想要一个来自[animals_Table]的所有[animalID]值的列表以及一个列,该列指示[animalID]是否具有等于'Intake'的“里程碑”。如果是这样,那么我会建议:
SELECT at.animalID, amt.milestoneType
FROM
animals_Table at
INNER JOIN
animalMilestones_Table amt
ON at.animalID = amt.animalID
WHERE amt.milestoneType = 'Intake'
UNION
SELECT animalID, NULL AS milestoneType
FROM animals_Table
WHERE animalID NOT IN (
SELECT animalID
FROM animalMilestones_Table
WHERE milestoneType = 'Intake'
)
ORDER BY 1
来想一想,这也应该有效,并且可能会更快:
SELECT at.animalID, amt.milestoneType
FROM
animals_Table at
LEFT JOIN
(
SELECT animalID, milestoneType
FROM animalMilestones_Table
WHERE milestoneType = 'Intake'
) amt
ON at.animalID = amt.animalID
答案 1 :(得分:0)
不确定MS Access是否支持此功能,但在SQL中,您可以将条件从WHERE
子句移到LEFT JOIN
,如下所示:
SELECT animals_Table.animalID, animalMilestones_Table.milestoneType
FROM animals_Table
LEFT JOIN animalMilestones_Table ON animals_Table.animalID=animalMilestones_Table.animalID AND animalMilestones_Table.milestoneType="Intake"
答案 2 :(得分:0)
也许下面的代码适合你。
SELECT
*
FROM
animals_table at
LEFT JOIN animalmilestones_table amt ON at.animalID = amt.animalID AND amt.milestoneType = "Intake"
请试一试,然后告诉我它是怎么回事。
答案 3 :(得分:0)
试试这个
SELECT animals_Table.animalID, animalMilestones_Table.milestoneType
FROM animals_Table
LEFT JOIN (SELECT milestoneType
FROM animalMilestones_Table
WHERE milestoneType = "Intake") as animalMilestones_Table
ON animals_Table.animalID = animalMilestones_Table.animalID;
答案 4 :(得分:0)
animalMilestones_Table.milestoneType将为NULL。您需要检查它是否为NULL或您要查询的值。
animalMilestones_Table.milestoneType="Intake" or animalMilestones_Table.milestoneType is null
不确定Accesss中的确切SQL语法
答案 5 :(得分:0)
尝试以下查询。希望这可以帮助你,让我知道这是否有帮助..
SELECT animals_Table.AnimalID, animalMilestones_Table.MileStoneType
FROM animals_Table LEFT JOIN animalMilestones_Table ON animals_Table.AnimalID = animalMilestones_Table.AnimalID
WHERE ((((animalMilestones_Table.MileStoneType)='Intake' Or (animalMilestones_Table.MileStoneType) like '*') Or (animalMilestones_Table.MileStoneType) Is Null)) ;
答案 6 :(得分:-1)
的作用:
SELECT animals_Table.animalID, animalMilestones_Table.milestoneType
FROM animals_Table
LEFT JOIN animalMilestones_Table ON animals_Table.animalID=animalMilestones_Table.animalID
AND animalMilestones_Table.milestoneType="Intake"
工作?