মাইএসকিউএল - অপেরাণ্ডে 1 টি কলাম থাকতে হবে


92

আমি তৈরি করছি এমন একটি সিস্টেমে কাজ করার সময়, আমি আমার প্রকল্পে নিম্নলিখিত কোয়েরিটি ব্যবহার করার চেষ্টা করেছি:

SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
    users.id AS posted_by_id
    FROM users
    WHERE users.id = posts.posted_by)
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id

": বিড়াল" আমার পিএইচপি কোড দ্বারা আবদ্ধ কারণ আমি পিডিও ব্যবহার করছি। 2 ": বিড়াল" এর জন্য একটি বৈধ মান।

এই ক্যোয়ারিতে যদিও আমাকে একটি ত্রুটি দেয়: "# 1241 - অপেরাণ্ডে 1 টি কলাম (গুলি) থাকা উচিত"

আমার স্ট্যাম্পগুলি হ'ল আমি ভাবব যে এই ক্যোয়ারী কোনও সমস্যা করবে না। কলামগুলি নির্বাচন করা, তারপরে অন্য টেবিল থেকে আরও দুটি নির্বাচন করা এবং সেখান থেকে চালিয়ে যাওয়া। সমস্যাটি কী তা আমি ঠিক বুঝতে পারি না।

এটির কোনও সহজ সমাধান আছে, বা আমার কোয়েরি লেখার অন্য কোনও উপায়?

উত্তর:


103

আপনার সাবকিউটি দুটি কলাম নির্বাচন করছে, যখন আপনি এটি একটি কলাম (বাইরের SELECTঅনুচ্ছেদের অংশ হিসাবে ) প্রজেক্ট করতে ব্যবহার করছেন । আপনি এই প্রসঙ্গে এই জাতীয় কোয়েরি থেকে কেবল একটি কলাম নির্বাচন করতে পারেন।

usersপরিবর্তে টেবিলে যোগদান বিবেচনা করুন ; আপনি কোন কলামগুলি থেকে চান তা নির্বাচন করার সময় এটি আপনাকে আরও স্বচ্ছন্দতা দেবে users

SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
users.username AS posted_by,
users.id AS posted_by_id

FROM topics

LEFT OUTER JOIN posts ON posts.topic_id = topics.id
LEFT OUTER JOIN users ON users.id = posts.posted_by

WHERE topics.cat_id = :cat
GROUP BY topics.id

উত্তরের জন্য ধন্যবাদ. আমি আমার ক্যোয়ারীটি ঠিক করে দেব, এবং আপনাকে উত্তর হিসাবে চিহ্নিত করব, তবে কেবল ইনপুট দেওয়ার জন্য, আপনি কি মনে করেন যে আমি এখন যা ব্যবহার করছি তার চেয়ে আমার কোয়েরিটি লেখার একটি আরও ভাল "উপায়" রয়েছে তবে এটির মধ্যে ত্রুটিটিও উপেক্ষা করছেন)?

আহ। আপনার মূল পোস্টে সম্পাদনার জন্য আপনাকে ধন্যবাদ। স্ট্যাকওভারফ্লো যখন আমাকে দেয় তখন আমি আপনাকে উত্তর হিসাবে চিহ্নিত করতে নিশ্চিত হব। অনেক ধন্যবাদ!

ঠিক আছে, COUNT()জিনিস কিছুটা ফেলে দিচ্ছে ; আমি যে জিজ্ঞাসা দিয়েছি তা সংগ্রহের কারণে সম্ভবত একটি ত্রুটি দেবে। আপনার জিজ্ঞাসার লক্ষ্যগুলি (যা এই মুহূর্তে আমার কাছে স্পষ্ট নয়) এর উপর নির্ভর করে আপনার এই সমষ্টিটি সাব-কোয়েরিতে স্থানান্তরিত হতে পারে।
সিডিওউই

17

যদি আপনি দূর্ঘটনাক্রমে পরিবর্তে কমা ব্যবহার এই ত্রুটি দেখা দিতে পারে ANDONএকটি ধারা JOIN:

JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
                                                        ^
                                             should be AND, not a comma

9

এই ত্রুটিটি ঘটতেও পারে যদি আপনি দুর্ঘটনার সাথে ক্লজের =পরিবর্তে ব্যবহার করেন :INWHERE

উদাহরণ স্বরূপ:

WHERE product_id = (1,2,3);

4
অথবা আমি যেমন করেছিলাম তেমন পরিবর্তে পছন্দ করি এবং কেন এই ত্রুটি ঘটে তা খুঁজে পেলাম না। পয়েন্টার জন্য ty।
এডগার্স আইভর্স

আপনি যদি নির্বাচন দফায় ক্ষেত্রগুলির চারপাশে বন্ধনী স্থাপন করেন, যেমন সারণি থেকে নির্বাচন করুন (ফিল্ড 1, ফিল্ড 2)
পল ক্রিস জোনস

6
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
    users.id AS posted_by_id
    FROM users
    WHERE users.id = posts.posted_by)

ঠিক আছে, আপনি এর মতো একটি সাবকোয়ারি থেকে একাধিক কলাম পেতে পারবেন না। ভাগ্যক্রমে, দ্বিতীয় কলামটি ইতিমধ্যে posts.posted_by! সুতরাং:

SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
posts.posted_by
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by_username
    FROM users
    WHERE users.id = posts.posted_by)
...

1

আমার ক্ষেত্রে, সমস্যাটি হ'ল আমি ভুল করে আমার কলামগুলির নির্বাচন বন্ধনীর সাথে ছড়িয়ে দিয়েছি:

SELECT (p.column1, p.colum2, p.column3) FROM table1 p where id = 1;

এবং হতে হবে:

SELECT p.column1, p.colum2, p.column3 FROM table1 p where id = 1;

নির্বোধ শোনায় তবে এটি এই ত্রুটিটি সৃষ্টি করে এবং এটি বের করতে কিছুটা সময় নিয়েছিল।


আমি বিশ্বাস করতে পারি না এটি আমার সমস্যাটি ছিল, আমি ভেবেছিলাম বন্ধনীগুলি এখানে আইনী ছিল
জোশ ম্যাকগি

0

এই ত্রুটিটি ঘটতে পারে এমন অন্য জায়গায় হ'ল একটি মান নির্ধারণ করা যা স্ট্রিংয়ের বাইরে কমা রয়েছে। উদাহরণ স্বরূপ:

SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)

0

আপনি যদি ভুলবশত ifফাংশনটির নামটি মিস করেন তবে এই ত্রুটিটিও ঘটতে পারে ।

উদাহরণ স্বরূপ:

set v_filter_value = 100;

select
    f_id,
    f_sale_value
from
    t_seller
where
    f_id = 5
    and (v_filter_value <> 0, f_sale_value = v_filter_value, true);

এই সমস্যা যখন আমি নির্বাণ মিস পেয়েছেন যদিifফাংশন!


0
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)

এখানে আপনি সাব-কোয়েরি ব্যবহার করছেন তবে এই সাব-কোয়েরিতে অবশ্যই একটি কলামই ফিরতে হবে। এটি পৃথক করুন অন্যথায় এটি ত্রুটি দেখায়।


0

ভুল জায়গায় বন্ধনী যুক্ত করার কারণে একটি ইন্টেলিজ কনসোলে একটি মাইএসকিউএল স্ক্রিপ্ট সম্পাদন করার সময় আমি এই ত্রুটিটি পেয়েছি:

ভুল:

SELECT user.id
FROM user
WHERE id IN (:ids); # Do not put brackets around list argument

অধিকার:

SELECT user.id
FROM user
WHERE id IN :ids; # No brackets is correct

: এই প্রথম উত্তর এখানে মেলে না stackoverflow.com/questions/24551177/...
rubydio

@ রবিডিও, এই প্রশ্নটি এইচকিউএল এবং হাইবারনেটকে উল্লেখ করেছে, যেখানে আমার উত্তরটি একটি ইন্টেলিজ কনসোলে মাইএসকিউএল উল্লেখ করছে
জানাক মীনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.