簡體   English   中英

有關子查詢和表聯接的SQL幫助

[英]SQL help on subqueries and table joins

需要一些SQL幫助...使用MYSQL ...我有一些遺留代碼和需要解決的情況...下面的代碼僅返回在p_occupants_insurance表中有記錄的居住者。 我希望能夠列出所有占用者,無論他們在p_occupants_insurance表中是否有記錄。

    SELECT a.occupants_insurance_id, a.occupant_id, a.policy_nbr, a.policy_type, a.coverage_amount_curr,

    CASE
        WHEN a.effective_date = '0000-00-00' THEN NULL
        ELSE a.effective_date
    END as effective_date,

    CASE
        WHEN a.expiration_date = '0000-00-00' THEN NULL
        ELSE a.expiration_date
    END as expiration_date,

a.insurance_company, a.custom1_label, a.custom2_label, a.custom3_label, a.custom1, a.custom2, a.custom3, c.name as prop_name, (SELECT x.name FROM portfolio_hierarchy x WHERE x.leaf_node_portf_id = d.portfolio_id ) as p_name, b.name as occupant_name, b.primary_contact, b.phone
FROM p_occupants_insurance a, p_occupants b, properties c, portfolio d
WHERE a.occupant_id = b.occupant_id
AND b.property_id = c.properties_id
AND c.portfolio_id = d.portfolio_id
AND d.account_id = 1
AND b.archived = 0
AND b.trashbin = 0
ORDER BY d.p_name ASC, prop_name ASC, occupant_name ASC, insurance_company ASC, policy_nbr ASC;

我知道我可以做這樣的子查詢:

SELECT b.name as occupant_name, b.primary_contact, b.phone,

(SELECT a.occupants_insurance_id FROM p_occupants_insurance a WHERE a.occupants_id = b.occupants_id) as occupants_insurance_id 


    FROM p_occupants b, properties c, portfolio d
    WHERE a.occupant_id = b.occupant_id
    AND b.property_id = c.properties_id
    AND c.portfolio_id = d.portfolio_id
    AND d.account_id = 1
    AND b.archived = 0
    AND b.trashbin = 0
    ORDER BY d.p_name ASC, prop_name ASC, occupant_name ASC, insurance_company ASC, policy_nbr ASC;

但這將導致我要從p_occupants_insurance表中查詢的每一列的子查詢。 有沒有更好的方法可以做到這一點,您能幫我寫出SQL嗎? 抱歉,SQL不是我的強項。

謝謝您的幫助。

在沒有看到所涉及的每個表的模式的情況下,僅依靠示例SQL語句,很難肯定地說一遍,但是我相信以下內容將返回您要查找的結果:

 SELECT 
    a.`occupants_insurance_id`,
    a.`occupant_id`,
    a.`policy_nbr`,
    a.`policy_type`,
    a.`coverage_amount_curr`,
    IF(a.`effective_date` = '0000-00-00',NULL,a.`effective_date`) as a.`effective_date`,
    IF(a.`expiration_date` = '0000-00-00',NULL,a.`expiration_date`) as a.`expiration_date`,
    a.`insurance_company`,
    a.`custom1_label`,
    a.`custom2_label`,
    a.`custom3_label`,
    a.`custom1`,
    a.`custom2`,
    a.`custom3`,
    c.`name` as `prop_name`, 
    (SELECT x.name FROM portfolio_hierarchy x WHERE x.leaf_node_portf_id = d.portfolio_id ) as `p_name`,
    b.`name` as `occupant_name`,
    b.`primary_contact`,
    b.`phone`
FROM `p_occupants` b
LEFT JOIN `p_occupants_insurance` a
    ON a.`occupant_id` = b.`occupant_id`
JOIN `properties` c
    ON b.`property_id` = c.`properties_id`
JOIN `portfolio` d
    ON c.`portfolio_id` = d.`portfolio_id`
WHERE d.account_id = 1
    AND b.archived = 0
    AND b.trashbin = 0
ORDER BY d.p_name ASC, 
    `prop_name` ASC, 
    `occupant_name` ASC, 
    `insurance_company` ASC, 
    `policy_nbr` ASC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM