I want to check if there is a person in the database who has exactly two specific addresses.
My proper SQL query:
SELECT name, id FROM person
WHERE person.name = 'Kxxx' AND person.firstname = 'Axxx'
AND EXISTS (
SELECT address.id FROM address INNER JOIN city
WHERE address.person_id = person.id AND city.name = 'Hxxx' AND address.h_number = '4')
AND EXISTS (
SELECT address.id FROM address INNER JOIN city
WHERE address.person_id = person.id AND city.name = 'Dxxx' AND address.h_number = '5')
;
I am trying to create (C# and QueryOver) but with no proper effects:
Person personAlias = null;
Address addressAlias = null;
City cityAlias = null;
var query = session.QueryOver(() => personAlias)
.Where(() => personAlias.Name == name)
.Where(() => personAlias.FirstName == firstName)
;
foreach (var addr in addresses)
{
var subQuery = QueryOver.Of(() => addressAlias)
.Where(() => addressAlias.HouseNumber == addr.HouseNumber)
.JoinAlias(() => addressAlias.CityRef, () => cityAlias)
.Where(() => cityAlias.Name == addr.CityName)
;
subQuery.Select(x => x.Id);
query.WithSubquery.WhereExists(subQuery);
}
This might be a silly question, but is there no reason you cannot do a COUNT()