Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6975681
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T17:23:59+00:00 2026-05-27T17:23:59+00:00

Question: In the UNIONized query below, how can I force @col to be assigned

  • 0

Question: In the UNIONized query below, how can I force @col to be assigned before the dependent derived queries are evaluated? Requirement: it needs to be done in one query.

CREATE TABLE tbl (col CHAR(1) NOT NULL UNIQUE);

INSERT INTO tbl (col) VALUES ('a'), ('b'), ('c'), ('d'), ('e'), ...;

-- Now, for some value of "col", fetch that record and the
-- immediately preceding and following records as ordered by "col"
--
-- If you care to test this, be sure to SET @col := NULL before
-- subsequent executions to simulate a "fresh" MySQL session...
--
SELECT @col := col AS col    -- Fetch particular record given a value of
  FROM tbl                   -- "col".
 WHERE col = 'd'
UNION ALL
SELECT col                   -- Fetch the immediately preceding record,
  FROM (  SELECT col         -- ordered by "col"
            FROM tbl
           WHERE col < @col
        ORDER BY col DESC
          LIMIT 1) preceding
UNION ALL
SELECT col                   -- Fetch the immediately following record,
  FROM (  SELECT col         -- ordered by "col"
            FROM tbl
           WHERE col > @col
        ORDER BY col ASC
          LIMIT 1) following
ORDER BY col ASC;

Background: From the UNIONized query above I expected to obtain three records: a record matching an exact and unique “col” value, and the immediately preceding and following records as ordered by “col”.

However, the first run of the query yields just one record, the one matching the user-supplied value for “col”. Subsequent runs give me the three I expect. My inference is that @col is not assigned until after the derived queries preceding and following are evaluated — that was not the left-to-right-top-to-bottom evaluation order I’d expected.

(I was attempting to refine an answer to this question, but ran in to this difficulty.)

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T17:24:00+00:00Added an answer on May 27, 2026 at 5:24 pm

    Don’t UNION the assignment of @col with your other queries.

    Have one query to assign a value to @col, and a separate query to include that record in your results.

    SELECT @col := col AS col    -- Fetch particular record given a value of
      FROM tbl                   -- "col", assigning the identifier to @col.
     WHERE col = 'd'
    
    
    
    SELECT col                   -- Now include the above record in the
      FROM tbl                   -- Final result-set
    WHERE col = @col
    
    UNION ALL
    
    SELECT col                   -- Fetch the immediately preceding record,
      FROM (  SELECT col         -- ordered by "col"
                FROM tbl
               WHERE col < @col
            ORDER BY col DESC
              LIMIT 1) preceding
    
    UNION ALL
    
    SELECT col                   -- Fetch the immediately following record,
      FROM (  SELECT col         -- ordered by "col"
                FROM tbl
               WHERE col > @col
            ORDER BY col ASC
              LIMIT 1) following
    ORDER BY col ASC;
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Question Can I build a image database/library that has an e-commerce style checkout system
Question Using XSLT 1.0, given a string with arbitrary characters how can I get
Question is not correctly framed i know, how do i code the below logic
Question: Can I override default functions in Javascript? Background: After figuring out that I
Question How can I remove empty xml tags in PHP? Example: $value1 = 2;
Question Summary: how can I get the path to the currently active application under
Question: Can I use the multiprocessing module together with gevent on Windows in an
Question : Can anyone tell me why my unit test is failing with this
Question: How can I implement shared memory variable in PHP without the semaphore package
Question: How to display the value of a C++ iterator using WinDbg, illustrated below:

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.