এসকিউএল বাম সাবকোরি এলিয়াস যোগ দিন


91

আমি এই এসকিউএল কোয়েরিটি চালাচ্ছি:

SELECT wp_woocommerce_order_items.order_id As No_Commande
FROM  wp_woocommerce_order_items
LEFT JOIN 
    (
        SELECT meta_value As Prenom
        FROM wp_postmeta
        WHERE meta_key = '_shipping_first_name'
    ) AS a
ON wp_woocommerce_order_items.order_id = a.post_id
WHERE  wp_woocommerce_order_items.order_id =2198

এবং আমি এই ত্রুটি পেয়েছি:

# 1054 - অজানা কলাম 'a.post_id' in 'ধারা'

আমি মনে করি আমার কোডটি বেশ সহজ, তবে আমি এটি সঠিক করতে পারি না। আমি কি ভুল করছি?

উত্তর:


151

আপনি post_idসাবকোয়ারিতে নির্বাচন করেন নি। আপনাকে এটিকে সাবকিউরিতে এটি নির্বাচন করতে হবে:

SELECT wp_woocommerce_order_items.order_id As No_Commande
FROM  wp_woocommerce_order_items
LEFT JOIN 
    (
        SELECT meta_value As Prenom, post_id  -- <----- this
        FROM wp_postmeta
        WHERE meta_key = '_shipping_first_name'
    ) AS a
ON wp_woocommerce_order_items.order_id = a.post_id
WHERE  wp_woocommerce_order_items.order_id =2198 

4
তোমাকে অনেক ধন্যবাদ! আমি একই ধরণের সমস্যার জন্য কাজ করছি এবং বাম জোটের আগে WHERE ধারাটি রেখেছিলাম এবং একটি ত্রুটি পাচ্ছিলাম। এটি সত্যিই সাহায্য করেছে। ধন্যবাদ!
অ্যালার্ডব্রায়েন

4
সাথী, আপনি কিংবদন্তি, এসকিউএল-এ পান্ডাস থেকে আগত এবং আমি একটি গরম মিনিটের জন্য আমার মাথা স্ক্র্যাচ করে যাচ্ছিলাম কেন সাব কোয়েরি কাজ করবে না wond চিয়ার্স
মানাকিন

21

আমি স্বীকার করেছি যে উত্তরটি কাজ করে এবং স্বীকৃত হয়ে গেছে তবে সেই ক্যোয়ারীটি লেখার আরও একটি পরিষ্কার উপায় আছে। মাইএসকিএল এবং পোস্টগ্রিসে পরীক্ষিত।

SELECT wpoi.order_id As No_Commande
FROM  wp_woocommerce_order_items AS wpoi
LEFT JOIN wp_postmeta AS wpp ON wpoi.order_id = wpp.post_id 
                            AND wpp.meta_key = '_shipping_first_name'
WHERE  wpoi.order_id =2198 

4
হাই, আগ্রহের বাইরে এই পদ্ধতিটি কি আরও দক্ষ হবে? বিকল্পভাবে কোথায় "ক্লাব" এ "AND wpp.meta_key = '_hipping_first_name'" স্থানান্তর করা আরও দক্ষ হবে?
ক্রিস

4
সত্যি বলতে কী, এগুলির কোনওটির বিষয়ে আমার ধারণা নেই। আমি কেবল এই উত্তরটি জুড়ে এসে লক্ষ্য করেছি যে কোয়েরিটি লেখার পরিষ্কার উপায় আছে তাই আমি অনুভব করেছি যে আমি এটি উল্লেখ করব। দুঃখিত আমি আরও সাহায্য হতে পারে না।
ইজে

4
মাইএসকিউএল / পোস্টগ্রিসএসকিউলে আপনি ব্যবহার করতে পারেন EXPLAIN SELECT ...বা এমএসএসকিউএলের জন্য SET SHOWPLAN_ALL ONবা SET SHOWPLAN_XML ONসারিগুলি কীভাবে পুনরুদ্ধার করা হয়েছে তা দেখতে। মাইএসকিউএল সালে used filesort, used temporaryসেগুলি ধীরে চলে এবং এড়িয়ে চলা উচিত। যোগদানকৃত সাবকোয়ারি হিসাবে, পোস্ট / অর্ডার আইডিতে যোগদানের আগে ডাব্লুপি_পোস্টমেটা টেবিল থেকে মেটা_কি মানটির সাথে মেলে সমস্ত সারি পুনরুদ্ধার করা দরকার। সুতরাং এটি ধরে নেওয়া নিরাপদ হওয়া উচিত যে অর্ডার / পোস্ট আইডি এবং মেটা_কি-র সাথে এটি মিলানো আরও দ্রুত হবে। সাধারণত আপনি যে জাতীয় ব্যবহার করেছেন তার মতো একটি সাবকিউরিটি সবচেয়ে ভাল ORDER BY LIMITযা মূল ক্যোয়ারী থেকে ফিল্টার করা যায় না।
বি

4
এসকিউএলফিডাল ফলাফল থেকে উদাহরণ: Criteria on Join sqlfiddle.com/#!2/e84fa/5 এবং Subquery on Join sqlfiddle.com/#!2/e84fa/3 দ্রষ্টব্য যে Subquery on Joinডাব্লুপি_পোস্টমেটা থেকে 22 টি সারি পুনরুদ্ধার করা হয়েছে যখন ডাব্লুপি_পোস্টমেটা থেকে Criteria on Joinএকমাত্র 1 পেয়েছে।
বি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.