我需要使用子查询方法,找到标题为“ Room”的书成为订单的一部分的次数。
相关架构表
orderDetails(oNo,bookISBN,数量)
book(isbn,书名,authorID,类型,pubYear,出版商, rrPrice,avgRating)
它以两个顺序出现,bookISBN和isbn是主键和外键
我尝试过
SELECT Count(*)
FROM orderDetails
WHERE 'Room' in (SELECT title
FROM book)
即使Room的订单只有两个,它也会返回25。我可以理解为什么这是错误的,但我不知道如何用ISBN来称呼这本书(不要只输入323,因为那样会很快捷)
答案 0 :(得分:0)
您的where子句的计算结果为true或false。它与外部查询不相关,所以:
您可以通过使用相关子句来解决此问题:
SELECT Count(*)
FROM orderDetails od
WHERE 'Room' IN (SELECT b.title FROM book b WHERE od.bookISBN = b.ISBN);
答案 1 :(得分:0)
使用此查询
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="100">
<ImageButton
android:id="@+id/homeButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20"
android:contentDescription="@string/home"
app:srcCompat="@drawable/ic_home" />
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="60"
android:gravity="center"
android:text="@string/app_name"
android:textSize="24sp"
android:textStyle="bold"
app:fontFamily="Sans Serif" />
<ImageButton
android:id="@+id/menuButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="20"
android:contentDescription="@string/menu"
app:srcCompat="@drawable/ic_menu_black_24dp" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>
您也可以在子查询中使用SELECT Count(*)
FROM orderDetails
WHERE bookISBN in (SELECT isbn
FROM book where title = 'Room')
运算符Like
作为标题
答案 2 :(得分:0)
常规查询,不使用子查询:
LookupOperation lookupOperation =LookupOperation.newLookup().from("simple").localField("execId.ref.uuid").foreignField("uuid").as("simple");
Aggregation myDocAggr = newAggregation(match(Criteria.where("metaId.ref.uuid").is(someUUID)), group("uuid").max("version").as("version"),
lookupOperation,
Aggregates.unwind(""),
Aggregates.addFields(fields));
Document document =new Document();
AggregationResults<String> myDocAggrResults = mongoTemplate.aggregate(myDocAggr , myDocument, myDocument.class);
List<String> mydocumentList = myDocAggrResults .getMappedResults();
具有内部查询的异常查询,我不建议这样做,因为这是不必要的,但是我们开始:
SELECT
COUNT(1)
FROM
orderDetails od
INNER JOIN book b ON b.isbn = od.bookISBN
WHERE
b.title LIKE '%ROOM%'
更多带有子查询的异常查询:
SELECT
COUNT(1)
FROM
orderDetails od
INNER JOIN (
SELECT isbn, title FROM book
) b ON b.isbn = od.bookISBN
WHERE
b.title LIKE '%ROOM%
提示:
1.我使用过SELECT
COUNT(1)
FROM
orderDetails od
WHERE
od.bookISBN IN (SELECT isbn FROM book WHERE title like '%ROOM%')
,因为没有必要对所有列进行计数,因此,您可以只对条件中的成功条目进行计数,这样会更快。
< br />
2.使用子查询会限制编译器的功能,因此,我建议不要这样做。
答案 3 :(得分:-1)
我认为“加入”会更好:
SELECT Count(*)
FROM orderDetails LEFT JOIN book ON isbn=bookISBN
WHERE title LIKE N'%Room%'
但是如果您必须使用子查询:
SELECT Count(*)
FROM orderDetails
WHERE bookISBN in (SELECT isbn
FROM book
WHERE title LIKE N'%Room%')
无论我们使用哪种方式,我们始终必须使用公共字段来获取