过去的试卷中有关医院的SQL /数据库问题涉及两个表:
Patient
表,列出了他们当前分配的病房的姓氏,姓氏和ID。Ward
表,其中列出了病房ID和名称以及其他常规属性。问题如下:
“使用SQL命令SELECT
,FROM
,WHERE
,编写一条SQL语句以查询数据库表中维多利亚病房所有患者的姓氏,姓氏和医疗状况编号。”
所以我需要
SELECT forename, surname, condition
FROM patients
WHERE ward == "Victoria"
但这是不可能的,因为患者没有ward
属性,只有wardID
,并且出于这个问题,我们假设我们不知道“维多利亚”病房。
因此,我需要选择Patient.WardID
对应于“维多利亚”的Ward.WardID
的每个患者,而不使用INNER JOIN
,根据我的阅读,我认为这是正常的方法为此。
我该怎么做?谢谢
编辑:我最初制作了这个,但是我认为这是不正确的。
SELECT patient.forename, patient.surname, patient.condition
FROM patient, ward
WHERE patient.WardID = ward.WardID
AND Ward.name == "Victoria"
答案 0 :(得分:1)
您可以使用相关子查询来查找病房名称:
@Test
public void test2 () throws Exception {
Class<?> klass = new ByteBuddy()
.subclass(Alpha.class, ConstructorStrategy.Default.NO_CONSTRUCTORS)
.implement(Indexed.class)
.defineConstructor(Visibility.PUBLIC)
.withParameters(Alpha.class, Long.class)
.intercept(
// Invoke Objects default constructor explicitly
MethodCall.invoke(Object.class.getConstructor())
.andThen(FieldAccessor.ofField("origin").setsArgumentAt(0))
.andThen(FieldAccessor.ofField("index").setsArgumentAt(1)))
.defineProperty("origin", Alpha.class, true)
.method(ElementMatchers.anyOf(Alpha.class.getMethods()))
.intercept(MethodCall.invokeSelf().onField("origin").withAllArguments())
.defineProperty("index", Long.class, true)
.make()
.load(AlphaImpl.class.getClassLoader())
.getLoaded();
Alpha origin = new AlphaImpl("Wrapped object", 10L);
Alpha indexed = (Alpha) klass.getConstructor(Alpha.class, Long.class).newInstance(origin, 13L);
assertEquals("Wrapped object", indexed.getName());
assertEquals(10L, (long)indexed.getRating());
assertEquals(13L, (long)((Indexed)indexed).getIndex());
}
我在查询中引入了表别名,以使其更加简洁和易于阅读。但是请注意,使用内部联接编写查询可能是首选的方法,也是执行效果最好的方法。您应该将这个问题视为一个难题,以查看您的SQL是否足够灵活。
答案 1 :(得分:1)
您可以使用联接
SELECT
p.forename
p.surname,
p.condition
FROM patient p
INNER JOIN ward w ON p.WardID = w.WardID
AND w.name = 'Victoria'
显式请求的位请记住,联接等效于where条件..如果您不希望联接..您可以简单地使用旧的(1992年以前的版本)SQL sintax
SELECT
p.forename
p.surname,
p.condition
FROM patient p, ward w
WHERE p.WardID = w.WardID
AND w.name = 'Victoria'