我有这两个表:
subscription (TABLE)
subscription_id int (10)
user_id int (10)
property_id int (10)
subscription_plan_id int (10)
active BIT ()
start_date timestamp ()
end_date date ()
subscription_plan (TABLE)
subscription_plan_id int (10)
plan_name varchar (100)
plan_month int (10)
description varchar (500)
plan_for char (1)
price float (12)
parent_id int (10)
我编写了这个select SQL查询来从两个表中获取数据:
SELECT subscription. * , subscription_plan.plan_name, subscription_plan.plan_month, subscription_plan.parent_id
FROM subscription
JOIN subscription_plan ON subscription.subscription_plan_id = subscription_plan.subscription_plan_id
WHERE subscription.user_id =71
AND subscription.property_id =981
ORDER BY subscription.subscription_plan_id ASC
LIMIT 0 , 30
我得到了这些结果:
现在我再次希望通过比较parent_id
和subscription_plan_id
以及匹配的过滤计划名称来获取计划名称。
检查下图,看看我想做什么:
供参考:
这是我的SQL小提琴:http://sqlfiddle.com/#!2/01727e/1/0
知道怎么做吗?
答案 0 :(得分:1)
试试这个:
SELECT DISTINCT sub . * , t2.plan_name, t2.plan_month, t1.plan_name, t2.parent_id
FROM subscription_plan AS t1
LEFT JOIN subscription_plan AS t2 ON t2.parent_id = t1.subscription_plan_id
JOIN subscription AS sub ON t2.subscription_plan_id = sub.subscription_plan_id
WHERE t2.plan_name IS NOT NULL
AND sub.user_id =71
AND sub.property_id =981
ORDER BY sub.subscription_plan_id ASC
我希望它有效
答案 1 :(得分:0)
您需要like
SELECT mytable.*, sp.plan_name AS 'parent_plan_id'
FROM (SELECT subscription. * , subscription_plan.plan_name, subscription_plan.plan_month, subscription_plan.parent_id as "new_parent_id"
FROM subscription
JOIN subscription_plan ON subscription.subscription_plan_id = subscription_plan.subscription_plan_id
WHERE subscription.user_id =71
AND subscription.property_id =981) AS mytable
INNER JOIN subscription_plan sp
ON mytable.new_parent_id = sp.parent_id
AND mytable.plan_month = sp.plan_month