ধ্রুবকগুলিতে ভরা একাধিক সারি কীভাবে নির্বাচন করবেন?


176

কোনও টেবিলের উল্লেখ না করে ধ্রুবকগুলি নির্বাচন করা এসকিউএল বিবৃতিতে পুরোপুরি আইনী:

SELECT 1, 2, 3

ফলাফলটি সেট করে যে পরবর্তীটি মান দেয় এমন একক সারি। আমি ভাবছিলাম যে যদি কোনও ধ্রুবক অভিব্যক্তি ব্যবহার করে একবারে একাধিক সারি নির্বাচন করার উপায় থাকে তবে এটি কোনওরকম:

SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))

আমি উপরের মতো কিছু চাই যা কাজ করে এবং 3 টি সারি এবং 3 কলাম সহ ফলাফল সেট দেয়।


1
আপনার উপরের কল্পনা করা সিনট্যাক্সটি অফিসিয়াল সিনট্যাক্সের চেয়ে সুন্দর (এবং INSERT INTO এর সাথে আরও সুসংগত)। শুধু Sayin.
পিট অ্যালভিন

2
@ পেটএলভিন কলগ্রাহী বাক্য গঠনটির পোস্টগ্র্রেসে ইতিমধ্যে একটি অর্থ রয়েছে (একটি টিউলযুক্ত একটি সারি নির্বাচন করা হয়েছে)।
কিরিল বুলিগিন 13

2
নীচে থাকা এসকিএল সার্ভারের উত্তরটি এসকিএল সার্ভারের জন্য ভাল কাজ করে এবং প্রায় এই সিনট্যাক্সের সাথে মেলে। stackoverflow.com/a/53269562/2129481
BenPen

উত্তর:


203
SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9

2
আমি এটি এসকিউএল সার্ভারের সাথে ব্যবহার করেছি এবং এটি কাজ করেছে, তবে আমাকে ASপ্রথমটি এলিয়াস দেওয়ার জন্য ব্যবহার করতে হয়েছিলSELECT
স্লেড

আপনাকে ধন্যবাদ আর্টবি, এই মন্তব্যটি অন্য বিকাশকারীদের সঠিক বাক্য গঠন করতে সহায়তা করতে পারে
ডিউফাই

3
অ্যাটাকাল Classic Reportবিষয়বস্তু সহ সারণী তৈরি করতে ওরাকল এপেক্স 5.1 এ পুরোপুরি কাজ করে , যদি FROM dualপ্রতিটি SELECT, মানগুলি এবং UNION ALLযদি উপস্থিত থাকে তার আগে সম্পন্ন হয় ।
VELFR

118

ইন PostgreSQL, আপনি করতে পারেন:

SELECT  *
FROM    (
        VALUES
        (1, 2),
        (3, 4)
        ) AS q (col1, col2)

অন্যান্য সিস্টেমে কেবল ব্যবহার করুন UNION ALL:

SELECT  1 AS col1, 2 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle
UNION ALL
SELECT  3 AS col1, 3 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle

ইন Oracle, SQL Serverএবং PostgreSQL, এছাড়াও আপনি সারি (একটি বহিস্থিত পরিবর্তনশীল সঙ্গে providable) এর নির্বিচারে সংখ্যা recordsets তৈরি করতে পারেন:

SELECT  level
FROM    dual
CONNECT BY
        level <= :n

মধ্যে Oracle,

WITH    q (l) AS
        (
        SELECT  1
        UNION ALL
        SELECT  l + 1
        FROM    q
        WHERE   l < @n
        )
SELECT  l
FROM    q
-- OPTION (MAXRECURSION 0)
-- uncomment line above if @n >= 100

মধ্যে SQL Server,

SELECT  l
FROM    generate_series(1, $n) l

মধ্যে PostgreSQL


1
আমার কাছে থাকা (কিছুটা আলাদা) প্রশ্নের উত্তর দেওয়ার জন্য +1: SELECT 1ওরাকলে কীভাবে করবেন ( SELECT 1 FROM Dualকাজ করেছেন)।
আসমুন্ড এলদুয়েস্ট

13

VALUESপোস্টগ্রেএসকিউএল-এ খালি কমান্ড অনুসরণ করা আমার পক্ষে কাজ করে:

VALUES (1,2,3), (4,5,6), (7,8,9)

1
টি-এসকিউএল তেও বহু-সারি সন্নিবেশকরণ ধারা হিসাবে কাজ করে। প্রথম কোনও টেবিলের পরিবর্তনশীল বা অস্থায়ী সারণীতে প্রবেশ করা কাজ করতে পারে তবে একাধিক পদক্ষেপ।
ব্রায়ানারি

12

ওরাকলে ধারা দ্বারা সংযোগটি চেষ্টা করুন, এরকম কিছু

select level,level+1,level+2 from dual connect by level <=3;

ধারা দ্বারা সংযোগ সম্পর্কিত আরও তথ্যের জন্য এই লিঙ্কটি অনুসরণ করুন: ইউআরএল সরানো হয়েছে কারণ ওরাকলেবিন সাইটটি এখন দূষিত।


8

মাইক্রোসফ্ট এসকিউএল সার্ভার বা পোস্টগ্রিস এসকিউএল এর জন্য আপনি এই বাক্য গঠনটি চেষ্টা করতে চাইতে পারেন

SELECT constants FROM (VALUES ('foo@gmail.com'), ('bar@gmail.com'), ('baz@gmail.com')) AS MyTable(constants)

আপনি এখানে একটি এসকিউএল ফিডল দেখতে পারেন: http://www.sqlfiddle.com/#!17/9eecb/34703/0


1
এটি একেবারে এসকিউএল সার্ভার ২০১০-তে কাজ করে Multi .কম ')) মাই টেবিল হিসাবে (কনস্ট্যান্টস, ইমেল)
বেনপেন

7

ওরাকল। এই পোস্টে ধন্যবাদ পিএল / এসকিউএল - যেখানে ক্লোজ ইন "তালিকা" পরিবর্তনশীল ব্যবহার করুন

আমি ম্যানুয়ালি মানগুলি ইনপুট করার জন্য আমার উদাহরণ বিবৃতিটি একসাথে রেখেছি (পরীক্ষকগণ কোনও অ্যাপ্লিকেশন পরীক্ষায় পুনরায় ব্যবহার করা হচ্ছে):

WITH prods AS (
    SELECT column_value AS prods_code 
    FROM TABLE(
        sys.odcivarchar2list(
            'prod1', 
            'prod2'
        )
    )
)
SELECT * FROM prods

1
এটি ছিল জীবন রক্ষাকারী। একটি বিষয় লক্ষণীয়: আপনি যদি খুব বেশি মান ত্রুটির মধ্যে পড়ে থাকেন তবে আপনি কেবল একটি ইউনিয়ন সমস্ত উইন্ডোজের সাথে করতে পারেন।
ScrappyDev


4

এখানে আমি কীভাবে ঝরঝরে এক্সএমএল ট্রিক ব্যবহার করে ওরাকল 10+ এ স্থিতিশীল ডেটা পপুলেট করব।

create table prop
(ID NUMBER,
 NAME varchar2(10),
 VAL varchar2(10),
 CREATED timestamp,
 CONSTRAINT PK_PROP PRIMARY KEY(ID)
);

merge into Prop p
using (
select 
  extractValue(value(r), '/R/ID') ID,
  extractValue(value(r), '/R/NAME') NAME,
  extractValue(value(r), '/R/VAL') VAL
from
(select xmltype('
<ROWSET>
   <R><ID>1</ID><NAME>key1</NAME><VAL>value1</VAL></R>
   <R><ID>2</ID><NAME>key2</NAME><VAL>value2</VAL></R>
   <R><ID>3</ID><NAME>key3</NAME><VAL>value3</VAL></R>
</ROWSET>
') xml from dual) input,
 table(xmlsequence(input.xml.extract('/ROWSET/R'))) r
) p_new
on (p.ID = p_new.ID)
when not matched then
insert
(ID, NAME, VAL, CREATED)
values
( p_new.ID, p_new.NAME, p_new.VAL, SYSTIMESTAMP );

একত্রীকরণটি কেবলমাত্র মূল সারণীতে অনুপস্থিত সারিগুলি সন্নিবেশ করায়, যদি আপনি নিজের সন্নিবেশ স্ক্রিপ্টটি পুনরায় চালাতে চান তবে সুবিধাজনক।




0

এটি ডিবি 2 এর এক্সএমএল বৈশিষ্ট্যগুলি ব্যবহার করে কীভাবে করবেন তা এখানে

SELECT *
FROM
XMLTABLE ('$doc/ROWSET/ROW' PASSING XMLPARSE ( DOCUMENT '
<ROWSET>
  <ROW>
    <A val="1" /> <B val="2" /> <C val="3" />
  </ROW>
  <ROW>
    <A val="4" /> <B val="5" /> <C val="6" />
  </ROW>
  <ROW>
    <A val="7" /> <B val="8" /> <C val="9" />
  </ROW>
</ROWSET>
') AS "doc"
   COLUMNS 
      "A" INT PATH 'A/@val',
      "B" INT PATH 'B/@val',
      "C" INT PATH 'C/@val'
) 
AS X
;

0

এই উপায় আপনাকে সাহায্য করতে পারে

SELECT   TOP 3
         1 AS First, 
         2 AS Second, 
         3 AS Third 
FROM     Any_Table_In_Your_DataBase

Any_Table_In_Your_DataBase:3 টিরও বেশি রেকর্ড রয়েছে এমন কোনও সারণী বা কোনও সিস্টেমের সারণী ব্যবহার করুন। এখানে আমাদের সেই টেবিলের ডেটা নিয়ে কোনও উদ্বেগ নেই।

আপনি Any_Table_In_Your_DataBaseটেবিল থেকে প্রথম, দ্বিতীয় এবং তৃতীয় কলামগুলির সাথে কলামকে সংযুক্ত করে ফলাফলের পরিবর্তনে আনতে পারেন ।


আপনি কোন ডাটাবেস ব্যবহার করবেন তা নির্দিষ্ট করা উচিত। 'টপ' কীওয়ার্ড ওরাকল দিয়ে কাজ করে না।
হান্স ডেরাগন

0

মাইএসকিউএলে, আপনি এটি করতে পারেন: values (1,2), (3, 4);

mysql> values (1,2), (3, 4);
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+
2 rows in set (0.004 sec)

মাইএসকিউএল 8 এর সাহায্যে কলামের নাম দেওয়াও সম্ভব:

mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+

1
"মানগুলি (1,2), (3, 4);"? এর জন্য আপনি মাইএসকিএল এর কোন সংস্করণে আছেন?
রিনি উলার

সেই দ্বিতীয় উদাহরণটি কি এখনও একাধিক সারি নির্বাচন করে? এগুলির মধ্যে দুটিও পিএইচপিএমএইডমিনে ক্যোয়ারী হিসাবে চালানো যায় না বলে মনে হয় .. আমি চাই যে আমি মাইএসকিউএল এর কোন সংস্করণটি চালু করছি তবে মাইএসকিউএল সংস্করণগুলি এত বিভ্রান্তিকর, এবং আমি নিশ্চিত হয়েছি যে আমি এটি বের করার সময় অবধি নিশ্চিত করব এই মন্তব্যটি সম্পাদনা করার জন্য সময়ের বাইরে থাকুন ...
এখনও_ড্রিমিং_1

0
select (level - 1) * row_dif + 1 as a, (level - 1) * row_dif + 2 as b, (level - 1) * row_dif + 3 as c
    from dual 
    connect by level <= number_of_rows;

এরকম কিছু

select (level - 1) * 3 + 1 as a, (level - 1) * 3 + 2 as b, (level - 1) * 3 + 3 as c
    from dual 
    connect by level <= 3;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.