仅选择具有匹配列值

时间:2017-11-30 05:16:41

标签: sql sql-server

所以我的任务是,当且仅当他们的所有产品都已停产时,才能返回公司信息。

我有一个Suppliers和一个Products表。 Suppliers表有一个ProductID列,Products表有一个ProductID和一个Discontinued列,用于存储一个位(1为真或0为假)。

如果有人能够解决这个问题,那就可以节省生命。

编辑:我正在使用的查询将是这样的

select 
    s.CompanyName, p.ProductName, p.Discontinued
from 
    Suppliers s 
join 
    Products p on s.SupplierID = p.SupplierID

并且输出将是这样的

CompanyName                   ProductName   Discontinued
-------------------------------------------------------------
Exotic Liquids                Chai                0
Exotic Liquids                Chang               0
Exotic Liquids                Aniseed Syrup       0
New Orleans Cajun Delights    Chef Anton's Cajun Seasoning  0
New Orleans Cajun Delights    Chef Anton's Gumbo Mix    1
Grandma Kelly's Homestead     Grandma's Boysenberry Spread  0
Grandma Kelly's Homestead     Uncle Bob's Organic Dried Pears   0
Grandma Kelly's Homestead     Northwoods Cranberry Sauce    0
Tokyo Traders                 Mishi Kobe Niku     1
Tokyo Traders                 Ikura               0

但我只希望它将供应商退回所有已停产的产品

3 个答案:

答案 0 :(得分:0)

我在这里走出困境,但我认为您正在尝试在ProductID上加入两个表格。

如果是这种情况,那么SQL查询将如下所示:

SELECT a.ProductID, b.Discontinued FROM Suppliers a
LEFT JOIN Products b ON (a.productID = b.productID)
WHERE b.Discontinued = true

答案 1 :(得分:0)

function my_redirect_function() {
    // check if argument is set
    if ( $_GET['find'] ) {
        // get site url
        $url = get_site_url() . '/' . $_GET['find'];

        // clone GET arguments
        $query = $_GET;

        // remove the find argument
        unset( $query['find'] );

        // add all get arguments to the new url
        $url = add_query_arg( $query, $url );

        // redirect to the generated url
        wp_redirect( $url );
        exit();
    }
}

add_action( 'template_redirect', 'my_redirect_function' );

答案 2 :(得分:0)

成为您使用的每种语言的更好的开发人员。停止尝试立即进行翻转。把问题分解成易消化的部分。并学习如何发布好问题。您有一个查询问题 - 您如何在不了解架构和了解如何使用架构的情况下,期望其他人了解您的问题并提供有用的建议。当然 - 在这种情况下它相当简单,但是生成表格的脚本,用样本数据填充它们,并包括你尝试过的任何鼓励他人回应的内容。

因此,第一步是回答“哪些供应仅提供已停产的产品”的问题。显然,您拥有Product中所需的所有信息。类似的东西:

select P.SupplierID from dbo.Products as P 
group by P.SupplierID
having min(cast(P.Discontinued as tinyint)) = 1
order by P.SupplierID;

我认为这是正确的,但仍然是猜测。有时候,一个专栏会被“使用”而不是这个名字。那是做什么的?对于group by子句(供应商ID)生成的每个组,它将确定Discontinued的最小值(因为您不能使用min / max with bit)所以需要进行转换。对于包含所有已停产产品的供应商,对于所有关联行,该列必须为1。因为1> 0,这意味着供应商的所有产品都已停产。分组还为我们提供了一组独特的行。

现在您已了解如何生成一组不同的SupplierID值,您应该能够将其应用于任何其他查询以获取有关这些供应商的信息。您可以加入,使用IN,使用存在 - 如果您想真正使这成为一种学习体验,请尝试所有三种。