嵌套查询,都使用NOT IN() - 这是如何工作的?

时间:2017-10-18 08:12:13

标签: mysql nested-queries

SELECT S.sname
FROM Sailors S
WHERE S.sid NOT IN (SELECT R.sid
        FROM Reserves R
        WHERE R.bid NOT IN (SELECT B.bid    
        FROM Boats B
        WHERE B.color='red'))

试图理解这一点。这个查询如何找到只保留红船和水手的水手的名字,这些船只根本没有预留任何船只。 NOT IN嵌套在另一个NOT IN中的工作原理是什么?

2 个答案:

答案 0 :(得分:0)

您的查询显示的sailors reserves不在red中且船只不是SELECT S.sname FROM Sailors S WHERE S.sid NOT IN (SELECT R.sid FROM Reserves R WHERE R.bid IN (SELECT B.bid FROM Boats B WHERE B.color <> 'red'))

你可以用这种方式重写它:

TextField {
    id: textField
    menu: null

    property color activeColor   : Properties.textField.enabledColor
    property color deactiveColor : Properties.textField.disabledColor
    property bool convertToUCase : false;
    property int closeImageSize: 26
    property int renderType: Text.QtRendering

    style: Style.textFieldStyle

    onTextChanged: {
        text = (convertToUCase) ? text.toUpperCase() : text;
    }
}

答案 1 :(得分:0)

此查询尝试排除所有使用红色以外的任何颜色保留船只的水手。我相信我们可以使用JOIN使其更具可读性,例如:

SELECT s.name
FROM sailors s LEFT JOIN reserves r ON s.sid = r.sid
JOIN boats b on r.bid = b.bid
WHERE b.color = 'Red'
GROUP BY s.name
HAVING COUNT(DISTINCT(b.color)) <= 1;